倿Žå±¥æŽ
2025-11-07â
ð Changedâ
â ïž Breaking Changesâ
- Chat Channels:
createChatChannelSchemaã¯iconãã£ãŒã«ããå¿ é ãšããªããªããŸãã - ã¢ã€ã³ã³ãæå®ããã«ãã£ã³ãã«ãäœæã§ããŸãïŒä»¥åã¯å¿ é ã§ããïŒ
Blocksâ
- Chat:
createChatMessage: æ·»ä»ãã¡ã€ã«åŠçãªãã§ã¡ãã»ãŒãžãäœæããããã«ç°¡çŽ å - æ·»ä»ãã¡ã€ã«ã¯å¥ã®ãšã³ããã€ã³ãã§ç®¡çãããŸãnormalizeChatMessageãšnormalizeChatMessages: æ·»ä»ãã¡ã€ã«åŠçã«éäžåãããnormalizeFileãŠãŒãã£ãªãã£ã䜿çšããããã«ãªãã¡ã¯ã¿ãªã³ã°normalizeChatMessageAttachment:normalizeFileãŠãŒãã£ãªãã£ãçŽæ¥äœ¿çšããããã«ç°¡çŽ å
- Product:
normalizeProductImage,normalizeImagesOfProduct,normalizeImagesOfProducts: éäžåãããnormalizeFileãŠãŒãã£ãªãã£ã䜿çšããããã«ãªãã¡ã¯ã¿ãªã³ã°imagesããããã£ããªãã·ã§ã³ã«ããŠãç»åãªãã®è£œåãé©åã«åŠçã§ããããã«ããŸãã
Schemasâ
- Chat:
createChatMessageSchema:attachmentsã®å¿ é èŠä»¶ãåé€ - æ·»ä»ãã¡ã€ã«ãªãã§ã¡ãã»ãŒãžãäœæã§ããŸãcreateChatChannelSchema:iconãã£ãŒã«ãããªãã·ã§ã³ã«å€æŽ - ã¢ã€ã³ã³ãªãã§ãã£ã³ãã«ãäœæã§ããŸã
- Product:
createProductSchemaãšcreateProductBatchSchema:imagesã®å¿ é èŠä»¶ãåé€ - ç»åãªãã§è£œåãäœæã§ããŸã
Routesâ
- Product:
createProductRouteãšcreateProductBatchRoute: ç»ååŠçãªãã®ç°¡çŽ åãããæ£èŠå颿°ã䜿çšããããã«æŽæ° - Chat: ã«ãŒããšã©ãŒãããã³ã°ãã
ProductBlockErrorãšChatMessageBlockErrorãåé€ - Chat:
updateChatMessageRoute: ã¢ã¯ã»ã¹å¶åŸ¡ãã¡ãã»ãŒãžææè ã®ã¿ã«å¶éãã管çè ã®äžæžãæš©éãåé€
ð Security Improvementsâ
Chat Message Access Control: ãã£ããã¡ãã»ãŒãžã®æŽæ°ãã¡ãã»ãŒãžææè ã®ã¿ã«å¶éããããšã§ãã»ãã¥ãªãã£ã匷åããŸããã以åã¯ãã¡ãã»ãŒãžææè ãšç®¡çè ã®äž¡æ¹ãã¡ãã»ãŒãžãæŽæ°ã§ããŸãããçŸåšã¯ãå ã®ã¡ãã»ãŒãžäœæè ã®ã¿ãèªåã®ã¡ãã»ãŒãžã倿Žã§ããŸãïŒ
- 倿Žå:
some(checkIdentityType(['admin']), ownsMessage)- 管çè ã®äžæžããèš±å¯ãããŠããŸãã - 倿ŽåŸ:
ownsMessage- ææè ã®ã¿ã®ã¢ã¯ã»ã¹å¶åŸ¡ - 圱é¿: äžæ£ãªã¡ãã»ãŒãžå€æŽã鲿¢ããããŒã¿æŽåæ§ãåäžãããŸã
ðïž Data Management Enhancementsâ
Soft Delete Combinator: æ°ãã withSoftDelete ã³ã³ãããŒã¿ã¯ãç£æ»èšŒè·¡æ©èœãåããèªåãœããå逿©èœãæäŸããŸãïŒ
- å®å
šãªåé€: æ°žç¶çãªåé€ã®ä»£ããã«
deletedAtã¿ã€ã ã¹ã¿ã³ãã§ã¬ã³ãŒããããŒã¯ããããšã§ãããŒãåé€ããœããåé€ã«å€æããŸã - èªåãã£ã«ã¿ãªã³ã°: ãã¹ãŠã®èªã¿åãæäœïŒ
find,findOne,countDocumentsïŒã¯ããœããåé€ãããã¬ã³ãŒããèªåçã«é€å€ããŸã - ç£æ»èšŒè·¡: ã³ã³ãã©ã€ã¢ã³ã¹ãšå埩ã®ç®çã§ãåé€ãããã¬ã³ãŒããããŒã¿ããŒã¹ã«ä¿æããŸã
- API äºææ§: æ¢åã®ãã³ãã©ãŒã¯å€æŽãªãã§åäœããŸã -
withSoftDeleteã§ã©ããããã ãã§ã - ããŒã¿å埩:
deletedAtãã£ãŒã«ããåé€ããããšã§ããœããåé€ãããã¬ã³ãŒãã埩å ã§ããŸã
äœ¿çšæ¹æ³:
import { withSoftDelete } from '@nodeblocks/backend-sdk';
// ä»»æã®ãã³ãã©ãŒãã©ããããŠèªåãœããå逿©èœãæå¹å
const safeDeleteHandler = withSoftDelete(deleteUserHandler);
// ãã¹ãŠã®ããŒã¿ããŒã¹æäœã§èªåçã«åäœããŸãïŒ
// - DELETE æäœã¯ deletedAt ã¿ã€ã ã¹ã¿ã³ãä»ãã® UPDATE ã«ãªããŸã
// - FIND æäœã¯ deletedAt ãååšããã¬ã³ãŒããé€å€ããŸã
// - UPDATE æäœã¯ãœããåé€ãã£ã«ã¿ãŒãå°éããŸã
ð§ Type Safety Improvementsâ
MongoDB ID Type Consistency: MongoDB ã¯ãšãªã®åã«ãã¹ãŠã® ID ãã£ãŒã«ããé©åã«æååã«ãã£ã¹ããããããã«ããããšã§ãããŒã¿ããŒã¹æäœå šäœã§åå®å šæ§ã匷åããŸãããããã«ãããæ°å€ ID ãšæåå ID ã®éã®æœåšçãªåã®äžäžèŽãé²ããŸãïŒ
- Chat Operations: ãã£ããã¡ãã»ãŒãžæ·»ä»ãã¡ã€ã«ã®åé€ã¯ãšãªã¯
String(attachmentId)ã䜿çšããããã«ãªããŸãã - Organization Management: ã¡ã³ããŒæäœã¯äžè²«ãã ID åŠçã®ããã«
String(organizationId)ãšString(identityId)ã䜿çšããŸã - Product Operations: ãããæäœã¯
$inã¯ãšãªã«productIds.map(String)ã䜿çšããããã«ãªããŸãã - Authentication: ã¢ã€ãã³ãã£ãã£æäœã¯ããã¹ãŠã®ããŒã¿ããŒã¹æŽæ°ãšã¯ãšãªã§äžè²«ããŠ
String(identityId)ã䜿çšããŸã - Invitation Management: ãã¹ãŠã®æåŸ
CRUD æäœã¯ MongoDB ã¯ãšãªã«
String(invitationId)ã䜿çšããŸã
ãããã®å€æŽã«ãããå®å šãªåŸæ¹äºææ§ãç¶æããªãããå®è¡æã®ä¿¡é Œæ§ãåäžããåã®äžäžèŽã«ããæœåšçãªã¯ãšãªå€±æãé²ããŸãã
ð¯ Architectural Improvementsâ
Entity Creation Simplification: ã³ã¢ãšã³ãã£ãã£ïŒã¡ãã»ãŒãžãšè£œåïŒã¯ããã¡ã€ã«æ·»ä»ãªãã§äœæãããããã«ãªããé¢å¿ã®åé¢ãä¿é²ããŸãããã¡ã€ã«æ·»ä»ã¯å°çšã®ãšã³ããã€ã³ãã§ç®¡çãããŸãïŒ
- Messages:
POST /messages(ã³ã¢) +POST /messages/:id/attachments(æ·»ä»ãã¡ã€ã«) - Products:
POST /products(ã³ã¢) +POST /products/:id/images(ç»å)
Normalization Centralization: ãã¡ã€ã«æ£èŠåããžãã¯ã¯ normalizeFile ãŠãŒãã£ãªãã£é¢æ°ã«éäžåãããã³ãŒãã®éè€ãæžãããä¿å®æ§ãåäžãããŸããããã¹ãŠã®ç»åãšæ·»ä»ãã¡ã€ã«ã®æ£èŠåã¯ããã®çµ±äžãããã¢ãããŒãã䜿çšããããã«ãªããŸããã
Access Control Refinement: ãã£ããã¡ãã»ãŒãžã®æš©éã¯ãã¡ãã»ãŒãžæŽæ°ã®ç®¡çäžæžããåé€ãã峿 Œãªæææš©ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ã匷å¶ããããã«åŒ·åãããŸãããããã¯æå°æš©éã®ååã«æ²¿ã£ãŠãããããŒã¿ã»ãã¥ãªãã£ãåäžãããŸãã
Schema Simplification: icon ãã£ãŒã«ãããªãã·ã§ã³ã«ããããšã§ããã£ã³ãã«äœæãåçåããã¢ã€ã³ã³ãæå®ããã«ãã£ã³ãã«ãäœæã§ããããã«ãªããŸãããããã«ããããã£ã³ãã«äœæããã»ã¹ã®æ©æŠãæžãããªãããå¥ã®ãšã³ããã€ã³ããéããã¢ã€ã³ã³ç®¡çã®å®å
šãªæ©èœãç¶æããŸãã
Data Safety Infrastructure: ãœããå逿©èœã®å°å
¥ã«ãããå
ç¢ãªããŒã¿ä¿è·ãšç£æ»èšŒè·¡ãæäŸããŸããwithSoftDelete ã³ã³ãããŒã¿ã¯ãå®å
šãª API äºææ§ãç¶æããªããæ°žç¶çãªããŒã¿æå€±ãé²ããå¿
èŠã«å¿ããŠããŒã¿å埩ãå¯èœã«ããããšã§ãããŒã¿æŽåæ§ã確ä¿ããŸãã
ãã®ãªãã¡ã¯ã¿ãªã³ã°ã«ãããå°çšãªãœãŒã¹ãšã³ããã€ã³ããéããŠå®å šãªæ©èœãç¶æããªãããšã³ãã£ãã£äœæãç°¡çŽ åããããšã§ API èšèšãæ¹åããéäžåããããã¡ã€ã«åŠçãŠãŒãã£ãªãã£ãéããŠã³ãŒãã®ä¿å®æ§ãåäžããã现ããã¢ã¯ã»ã¹å¶åŸ¡ãéããŠã»ãã¥ãªãã£ã匷åããå æ¬çãªãœããå逿©èœã§ããŒã¿å®å šæ§ã確ä¿ããŸãã
2025-11-06â
main
âš Addedâ
Profile Follow Managementâ
-
Delete Profile Follow: ãããã£ãŒã«ãã©ããŒé¢ä¿ãåé€ããæ©èœã远å ïŒãã©ããŒè§£é€ïŒ
deleteProfileFollowRouteã远å - ãã©ããŒé¢ä¿ãåé€ãã DELETE ãšã³ããã€ã³ãdeleteProfileFollowFeatureã远å - æ€èšŒãšã«ãŒãã£ã³ã°ãå«ãå®å šãªæ©èœdeleteProfileFollowSchemaã远å - ãããã£ãŒã«ãã©ããŒåé€ã®ãã¹ãã©ã¡ãŒã¿æ€èšŒ- User Service ãæŽæ°ã㊠DELETE
/profiles/:profileId/profile-follows/:followProfileIdãšã³ããã€ã³ããå«ãã - èªå¯: 管çè ããŒã«ãŸãã¯ãããã£ãŒã«æææš©ãå¿ èŠ
- å逿åæã«
204 No Contentãè¿ã - ãããã£ãŒã«ãŸãã¯ãã©ããŒé¢ä¿ãååšããªãå Žåã
404 Not Foundãè¿ã - ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!261 ãåç §
-
Get Profile Followers: ãããã£ãŒã«ã®ãã©ãã¯ãŒã®ããŒãžããŒã·ã§ã³ä»ããªã¹ããååŸããæ©èœã远å
getProfileFollowersRouteã远å - ããŒãžããŒã·ã§ã³ä»ãã§ãã©ãã¯ãŒãååŸãã GET ãšã³ããã€ã³ãgetProfileFollowersFeatureã远å - æ€èšŒãããŒãžããŒã·ã§ã³ãã«ãŒãã£ã³ã°ãå«ãå®å šãªæ©èœgetProfileFollowersSchemaã远å - ãã©ãã¯ãŒååŸã®ãã¹ãã©ã¡ãŒã¿æ€èšŒnormalizeFollowersã远å - ã¢ãã¿ãŒ URL ã§ãã©ãã¯ãŒããŒã¿ãæ£èŠåãããããã¯é¢æ°buildProfileFollowersByFollowProfileIdQueryã远å - MongoDB ãã©ãã¯ãŒã¯ãšãªãæ§ç¯ãããããã¯é¢æ°- User Service ãæŽæ°ã㊠GET
/profiles/:profileId/followersãšã³ããã€ã³ããå«ãã - èªå¯: 管çè ããŒã«ãŸãã¯ãããã£ãŒã«æææš©ãå¿ èŠ
- ããŒãžããŒã·ã§ã³ä»ããã©ãã¯ãŒãªã¹ããšæ£èŠåãããã¢ãã¿ãŒ URL ã§
200 OKãè¿ã - ã¯ãšãªãã©ã¡ãŒã¿ïŒpage, limitïŒã«ããããŒãžããŒã·ã§ã³ããµããŒã
- ãããã£ãŒã«ãååšããªãå Žåã
404 Not Foundãè¿ã - ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!232 ãåç §
-
Create Organization Follow: çµç¹ãã©ããŒé¢ä¿ãäœæããæ©èœã远å
createOrganizationFollowRouteã远å - çµç¹ãã©ããŒé¢ä¿ãäœæãã PUT ãšã³ããã€ã³ãcreateOrganizationFollowFeatureã远å - æ€èšŒãšã«ãŒãã£ã³ã°ãå«ãå®å šãªæ©èœcreateOrganizationFollowSchemaã远å - çµç¹ãã©ããŒäœæã®ãã¹ãã©ã¡ãŒã¿æ€èšŒcreateOrganizationFollowã远å - çµç¹ãã©ããŒé¢ä¿ãäœæãããããã¯é¢æ°OrganizationAlreadyFollowedBlockErrorã远å - éè€ããçµç¹ãã©ããŒã®ãšã©ãŒOrganizationNotFoundErrorã远å - çµç¹ã¬ã³ãŒããèŠã€ãããªãå Žåã®ãšã©ãŒ- User Service ãæŽæ°ã㊠PUT
/profiles/:profileId/organization-follows/:followOrganizationIdãšã³ããã€ã³ããå«ãã - èªå¯: 管çè ããŒã«ãŸãã¯ãããã£ãŒã«æææš©ãå¿ èŠ
- äœææåæã«
204 No Contentãè¿ã - çµç¹ãæ¢ã«ãã©ããŒãããŠããå Žåã
409 Conflictãè¿ã - ãããã£ãŒã«ãŸãã¯çµç¹ãååšããªãå Žåã
404 Not Foundãè¿ã - ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!233 ãåç §
-
Delete Organization Follow: çµç¹ãã©ããŒé¢ä¿ãåé€ããæ©èœã远å
deleteOrganizationFollowRouteã远å - çµç¹ãã©ããŒé¢ä¿ãåé€ãã DELETE ãšã³ããã€ã³ãdeleteOrganizationFollowFeatureã远å - æ€èšŒãšã«ãŒãã£ã³ã°ãå«ãå®å šãªæ©èœdeleteOrganizationFollowSchemaã远å - çµç¹ãã©ããŒåé€ã®ãã¹ãã©ã¡ãŒã¿æ€èšŒdeleteOrganizationFollowã远å - çµç¹ãã©ããŒé¢ä¿ãåé€ãããããã¯é¢æ°OrganizationFollowNotFoundBlockErrorã远å - çµç¹ãã©ããŒé¢ä¿ãèŠã€ãããªãå Žåã®ãšã©ãŒ- User Service ãæŽæ°ã㊠DELETE
/profiles/:profileId/organization-follows/:followOrganizationIdãšã³ããã€ã³ããå«ãã - èªå¯: 管çè ããŒã«ãŸãã¯ãããã£ãŒã«æææš©ãå¿ èŠ
- å逿åæã«
204 No Contentãè¿ã - ãããã£ãŒã«ãçµç¹ããŸãã¯ãã©ããŒé¢ä¿ãååšããªãå Žåã
404 Not Foundãè¿ã - ååšæ€èšŒ: ååšããªãé¢ä¿ã«å¯ŸããŠãµã€ã¬ã³ãæåã®ä»£ããã« 404 ãè¿ã
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!236 ãåç §
-
Get Organization Followers: çµç¹ãã©ãã¯ãŒã®ããŒãžããŒã·ã§ã³ä»ããªã¹ããååŸããæ©èœã远å
getOrganizationFollowersRouteã远å - ããŒãžããŒã·ã§ã³ä»ãã§çµç¹ãã©ãã¯ãŒãååŸãã GET ãšã³ããã€ã³ãgetOrganizationFollowersFeatureã远å - æ€èšŒãããŒãžããŒã·ã§ã³ãã«ãŒãã£ã³ã°ãå«ãå®å šãªæ©èœgetOrganizationFollowersSchemaã远å - ãã©ãã¯ãŒååŸã®ãã¹ãã©ã¡ãŒã¿æ€èšŒbuildOrganizationFollowersByFollowOrganizationIdQueryã远å - MongoDB ãã©ãã¯ãŒã¯ãšãªãæ§ç¯ãããããã¯é¢æ°- Organization Service ãæŽæ°ããŠããã©ãã¯ãŒããŒã¿ã¢ã¯ã»ã¹ã«
usersã³ã¬ã¯ã·ã§ã³ãå¿ èŠãšããããã«ããŸãã - èªå¯: 管çè ããŒã«ãŸãã¯çµç¹æææš©ãå¿ èŠ
- ããŒãžããŒã·ã§ã³ä»ããã©ãã¯ãŒãªã¹ããšæ£èŠåãããã¢ãã¿ãŒ URL ã§
200 OKãè¿ã - ã¯ãšãªãã©ã¡ãŒã¿ïŒpage, limitïŒã«ããããŒãžããŒã·ã§ã³ããµããŒã
- çµç¹ãååšããªãå Žåã
404 Not Foundãè¿ã - äžè²«æ§ã®ããã«ãããã£ãŒã«ãããã¯ïŒfindProfiles, normalizeFollowersïŒãåå©çš
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!246 ãåç §
Product Like Managementâ
-
Create Product Like: 補åãããé¢ä¿ãäœæããæ©èœã远å ïŒè£œåããæ°ã«å ¥ãã«è¿œå ïŒ
createProductLikeRouteã远å - 補åãããé¢ä¿ãäœæãã PUT ãšã³ããã€ã³ãcreateProductLikeFeatureã远å - æ€èšŒãšã«ãŒãã£ã³ã°ãå«ãå®å šãªæ©èœcreateProductLikeSchemaã远å - 補åãããäœæã®ãã¹ãã©ã¡ãŒã¿æ€èšŒcreateProductLikeã远å - 補åãããé¢ä¿ãäœæãããããã¯é¢æ°ProductAlreadyLikedBlockErrorã远å - éè€ãã補åãããã®ãšã©ãŒ- User Service ãæŽæ°ã㊠PUT
/profiles/:profileId/product-likes/:likeProductIdãšã³ããã€ã³ããå«ãã - User Service ãæŽæ°ããŠãè£œåæ€èšŒã«
productsã³ã¬ã¯ã·ã§ã³ãå¿ èŠãšããããã«ããŸãã - èªå¯: 管çè ããŒã«ãŸãã¯ãããã£ãŒã«æææš©ãå¿ èŠ
- äœææåæã«
201 Createdãè¿ã - 補åãæ¢ã«ããããããŠããå Žåã
409 Conflictãè¿ã - ãããã£ãŒã«ãŸãã¯è£œåãååšããªãå Žåã
404 Not Foundãè¿ã - MongoDB $ne æŒç®åã䜿çšããéè€é²æ¢
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!240 ãåç §
-
Delete Product Like: 補åãããé¢ä¿ãåé€ããæ©èœã远å ïŒè£œåã®ãæ°ã«å ¥ããè§£é€ïŒ
deleteProductLikeRouteã远å - 補åãããé¢ä¿ãåé€ãã DELETE ãšã³ããã€ã³ãdeleteProductLikeFeatureã远å - æ€èšŒãšã«ãŒãã£ã³ã°ãå«ãå®å šãªæ©èœdeleteProductLikeSchemaã远å - 補åãããåé€ã®ãã¹ãã©ã¡ãŒã¿æ€èšŒdeleteProductLikeã远å - 補åãããé¢ä¿ãåé€ãããããã¯é¢æ°ProductLikeNotFoundBlockErrorã远å - 補åãããé¢ä¿ãèŠã€ãããªãå Žåã®ãšã©ãŒ- User Service ãæŽæ°ã㊠DELETE
/profiles/:profileId/product-likes/:likeProductIdãšã³ããã€ã³ããå«ãã - èªå¯: 管çè ããŒã«ãŸãã¯ãããã£ãŒã«æææš©ãå¿ èŠ
- å逿åæã«
204 No Contentãè¿ã - ãããã£ãŒã«ã補åããŸãã¯ãããé¢ä¿ãååšããªãå Žåã
404 Not Foundãè¿ã - ååšæ€èšŒ: ååšããªãé¢ä¿ã«å¯ŸããŠãµã€ã¬ã³ãæåã®ä»£ããã« 404 ãè¿ã
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!241 ãåç §
ð Fixedâ
Securityâ
- Identity Service: ã»ãã¥ãªãã£åŒ·åã®ãããã¢ã€ãã³ãã£ãã£ãšã³ããã€ã³ãã®ã¬ã¹ãã³ã¹ãããã¹ã¯ãŒããã£ãŒã«ããåé€
GET /identities/:identityIdãæŽæ°ããŠãã¬ã¹ãã³ã¹ãããã¹ã¯ãŒããé€å€GET /identitiesãæŽæ°ããŠãã¬ã¹ãã³ã¹ãããã¹ã¯ãŒããé€å€PATCH /identities/:identityIdãæŽæ°ããŠãã¬ã¹ãã³ã¹ãããã¹ã¯ãŒããé€å€- ãã¹ã¯ãŒããã£ãŒã«ãã¯ãã¯ã©ã€ã¢ã³ãã«ã¬ã¹ãã³ã¹ãéä¿¡ããåã«ãã£ã«ã¿ãªã³ã°ãããããã«ãªããŸãã
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!254 ãåç §
Blocksâ
- MongoDB: ããŒã¿ããŒã¹ãŠãŒãã£ãªãã£é¢æ°ãå«ãæ°ãã MongoDB ãããã¯ã¢ãžã¥ãŒã«
findResources: ãšã©ãŒãã³ããªã³ã°ä»ãã§ MongoDB ã³ã¬ã¯ã·ã§ã³ããè€æ°ã®ããã¥ã¡ã³ããååŸbuildWithoutMongoIdFindOptions: ã¯ãšãªçµæãã _id ãã£ãŒã«ããé€å€ããæåœ±ãªãã·ã§ã³ãäœæ
- Identity:
buildIdentityIdFilter: ããŒã¿ããŒã¹ã¯ãšãªçšã®ã¢ã€ãã³ãã£ã㣠ID ãã£ã«ã¿ãŒãªããžã§ã¯ããæ§ç¯ - Profile:
ProfileDbBlockError: ãããã£ãŒã«é¢é£ã®ããŒã¿ããŒã¹å€±æçšã®ããŒã¿ããŒã¹æäœãšã©ãŒã¯ã©ã¹ - User:
findProfiles: æšæºåããããšã©ãŒãã³ããªã³ã°ã§ MongoDB ããè€æ°ã®ãããã£ãŒã«ããã¥ã¡ã³ããååŸ
Featuresâ
- User:
findProfilesByIdentityIdFeature: ã¹ããŒãæ€èšŒãšã«ãŒãã£ã³ã°ãå«ãã¢ã€ãã³ãã£ã㣠ID ã«ãããŠãŒã¶ãŒãããã£ãŒã«ååŸ
Routesâ
- User:
findProfilesByIdentityIdRoute: ãããã£ãŒã«ååŸãšã¢ãã¿ãŒåŠçãå«ã GET/profiles/identities/:identityId
Schemasâ
- Identity:
findByIdentityIdSchema: ãã¹ãã©ã¡ãŒã¿ãšããŒãžããŒã·ã§ã³æ€èšŒãå«ã ID ã«ããã¢ã€ãã³ãã£ãã£ååŸã¹ããŒã
Servicesâ
- User: ã¢ã€ãã³ãã£ã㣠ID ã«ãããããã£ãŒã«ååŸã®ãããuser service ã«
findProfilesByIdentityIdFeatureã远å - Product: ããŒãžããŒã·ã§ã³ãšç»åæ£èŠåãå«ãçµç¹ã¹ã³ãŒãã®è£œåååŸã®ãããproduct service ã«
findProductsByOrganizationIdFeatureã远å - Product: ã¢ãã¿ãŒæ£èŠåãšç®¡çè
èªå¯ãå«ãç¹å®ã®è£œåãããããããŠãŒã¶ãŒãååŸãããããproduct service ã«
getProductLikersFeatureã远å
Primitivesâ
- Error: äžè²«ãããšã©ãŒãã³ããªã³ã°ã®ããã®
ErrorConstructorãšBlockErrorConstructoråå®çŸ©ã远å
Chatâ
- Message Templates: ãã£ããã¡ãã»ãŒãžãã³ãã¬ãŒãã®æ°ãããªã¹ãæ©èœ
findChatMessageTemplates: ããŒã¿ããŒã¹ãšã©ãŒãã³ããªã³ã°ä»ãã§ãã£ã«ã¿ãŒã«äžèŽãããã£ããã¡ãã»ãŒãžãã³ãã¬ãŒããæ€çŽ¢buildFilterToGetChatMessageTemplatesByOrganizationId: ãã³ãã¬ãŒãã¯ãšãªçšã®çµç¹åºæãã£ã«ã¿ãŒãæ§ç¯findChatMessageTemplatesFeature: ããŒãžããŒã·ã§ã³ãšããŒã¿æ£èŠåãå«ããã£ããã¡ãã»ãŒãžãã³ãã¬ãŒãããªã¹ãããå®å šãªæ©èœfindChatMessageTemplatesForOrganizationFeature: ããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãå«ãçµç¹ã¹ã³ãŒãã®ã¡ãã»ãŒãžãã³ãã¬ãŒããªã¹ãfindChatMessageTemplatesRoute: 管çè å°çšã¢ã¯ã»ã¹å¶åŸ¡ãå«ã GET/message-templatesã«ãŒãfindChatMessageTemplatesForOrganizationRoute: çµç¹ããŒã«æ€èšŒãå«ã GET/organizations/:organizationId/message-templatesã«ãŒãfindChatMessageTemplatesSchema: ããŒãžããŒã·ã§ã³ãã©ã¡ãŒã¿ã®ã¹ããŒãæ€èšŒfindChatMessageTemplatesForOrganizationSchema: çµç¹ã¹ã³ãŒãã®ãã³ãã¬ãŒãååŸã®ã¹ããŒãæ€èšŒ
- Chat Service: å
æ¬çãªã¡ãã»ãŒãžãã³ãã¬ãŒã管çã®ãããchat service ã«
findChatMessageTemplatesFeatureãšfindChatMessageTemplatesForOrganizationFeatureã远å
Order Managementâ
- Order Blocks: ããŒã¿ããŒã¹æäœãšãšã©ãŒãã³ããªã³ã°ãå«ãæ°ããæ³šæç®¡çã¢ãžã¥ãŒã«
OrderBlockError: 泚æé¢é£æäœã®ããŒã¹ãšã©ãŒã¯ã©ã¹OrderDbBlockError: 泚ææäœçšã®ããŒã¿ããŒã¹åºæãšã©ãŒã¯ã©ã¹findOrders: MongoDB ã³ã¬ã¯ã·ã§ã³ãããã£ã«ã¿ãªã³ã°ãšããŒãžããŒã·ã§ã³ä»ãã§æ³šæãååŸ
- Organization Integration: çµç¹ã¹ã³ãŒãã®æ³šæç®¡ç
buildOrganizationIdFilter: ããŒã¿ããŒã¹ã¯ãšãªçšã®çµç¹ ID ãã£ã«ã¿ãŒãªããžã§ã¯ããæ§ç¯findByOrganizationIdSchema: ããŒãžããŒã·ã§ã³ãå«ãçµç¹ãªãœãŒã¹ååŸã®ã¹ããŒãæ€èšŒ
- Order Features: æ°ããçµç¹ã¹ã³ãŒãã®æ³šæååŸæ©èœ
findOrdersByOrganizationIdFeature: ããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãå«ãçµç¹ã¹ã³ãŒãã®æ³šæååŸã®å®å šãªæ©èœfindOrdersByOrganizationIdRoute: çµç¹ããŒã«æ€èšŒãå«ã GET/orders/organizations/:organizationIdã«ãŒã
- Order Service: çµç¹ã¹ã³ãŒãã®æ³šæååŸã§åŒ·å
- order service ã®æ§æã«
findOrdersByOrganizationIdFeatureã远å - çµç¹ã¡ã³ããŒïŒowner/admin/member ããŒã«ïŒçšã®æ°ãããšã³ããã€ã³ã: GET
/orders/organizations/:organizationId - ãã«ãããã³ã泚æç®¡çã®å æ¬çãªããŒã«ããŒã¹ã¢ã¯ã»ã¹å¶åŸ¡
- order service ã®æ§æã«
Developmentâ
- REPL: TypeScript éçºäœéšãåäžãããããã
ts-nodeããŒã¹ã® REPL ã远å - Rules: èªåãã¹ãã¬ã€ãã³ã¹ã®ããã® Test-Author Agent Prompt ã远å
Blocksâ
- Common:
normalizeRawDocument: API ã¬ã¹ãã³ã¹çšã« MongoDB_idãã£ãŒã«ããåé€ããçããã¥ã¡ã³ãæ£èŠåãŠãŒãã£ãªãã£normalizeDocuments: åããã¥ã¡ã³ããã MongoDB_idãã£ãŒã«ããåé€ããŠçããã¥ã¡ã³ãã®é åãæ£èŠå
- Organization:
findChangeRequests: ããŒã¿ããŒã¹ããç¹å®ã®çµç¹ã®å€æŽãªã¯ãšã¹ããååŸnormalizeChangeRequest: ãã¡ã€ã« URL ãšã³ãªããã¡ã³ãä»ãã§åäžã®å€æŽãªã¯ãšã¹ããæ£èŠånormalizeChangeRequests: ãã¡ã€ã«åŠçä»ãã§å€æŽãªã¯ãšã¹ãã®é åãæ£èŠå- Error Class:
OrganizationChangeRequestError: 倿Žãªã¯ãšã¹ãæäœã®å€±æ
- Product:
createProductVariant: æ¢åã®è£œåã® MongoDB ã³ã¬ã¯ã·ã§ã³ã«è£œåããªã¢ã³ããäœæcreateProductVariantBulk: ããŒã¿ããŒã¹ã³ã¬ã¯ã·ã§ã³å ã§è€æ°ã®è£œåããªã¢ã³ããäžæ¬äœæbuildFilterToGetProductVariantsByIds: MongoDB $in æŒç®åã䜿çšã㊠ID ã§è£œåããªã¢ã³ããååŸããããŒã¿ããŒã¹ãã£ã«ã¿ãŒãæ§ç¯findProductVariants: MongoDB ã³ã¬ã¯ã·ã§ã³ãããã£ã«ã¿ãŒæ¡ä»¶ä»ãã§è£œåããªã¢ã³ããååŸbuildFilterToGetProductVariantsByProductId: 補å ID ã§æ¢åã®è£œåããªã¢ã³ããååŸããããŒã¿ããŒã¹ãã£ã«ã¿ãŒãæ§ç¯getProductVariantById: ãªãã·ã§ã³ã®è£œåã¹ã³ãŒãä»ãã§ ID ã§è£œåããªã¢ã³ããååŸupdateProductVariant: ãªãã·ã§ã³ã®å¶çŽä»ãã§è£œåããªã¢ã³ããã£ãŒã«ããæŽæ°deleteProductVariant: MongoDB ã³ã¬ã¯ã·ã§ã³ãã ID ã§è£œåããªã¢ã³ããåé€deleteImagesOfProduct: ãã¡ã€ã«ã¹ãã¬ãŒãžãã補åã«é¢é£ä»ãããããã¹ãŠã®ç»åãåé€
- Chat:
generateChatChannelIconUploadUrl: ãã£ãããã£ã³ãã«ã¢ã€ã³ã³ç»åçšã®çœ²åä»ãã¢ããããŒã URL ãçænormalizeChatChannel: API ã¬ã¹ãã³ã¹çšã«ã¢ã€ã³ã³ãã¡ã€ã«åŠçä»ãã§ãã£ãããã£ã³ãã«ããŒã¿ãæ£èŠå
- File Storage:
normalizeFile: API ã¬ã¹ãã³ã¹çšã«çœ²åä»ãããŠã³ããŒã URL çæä»ãã§ãã¡ã€ã«ããŒã¿ãæ£èŠå
- User:
deleteAvatar: ã¹ãã¬ãŒãžã·ã¹ãã ãããŠãŒã¶ãŒã¢ãã¿ãŒãã¡ã€ã«ãåé€
main
-
Authentication:
normalizeIdentityWithoutPasswordãnormalizeIdentityã«ãªããŒã- æ»ãå€ã®åã
objectããResult<Record<string, unknown>, never>ã«æŽæ° - ãããæ£èŠåçšã®
normalizeIdentitiesWithoutPassword颿°ã远å - API ã¬ã¹ãã³ã¹ã§ãã¹ã¯ãŒããã£ãŒã«ããå ¬éãããªãããã«ã»ãã¥ãªãã£ã匷å
-
OAuth:
- Google OAuth ãµã€ã³ã¢ãã äžã«ã¡ãŒã«äžææ§æ€èšŒã远å
- ãµã€ã³ã¢ãããããŒäžã«ã¡ãŒã«ãæ¢ã«ååšããå Žåã
409 Conflictãšã©ãŒãè¿ã - ã¢ã€ãã³ãã£ãã£ãèŠã€ãããªãã·ããªãªã®ãšã©ãŒã¡ãã»ãŒãžãæ¹å
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!258 ãåç §
generateRedirectURLãæŽæ°: ã¯ã³ã¿ã€ã ããŒã¯ã³ãã©ã¡ãŒã¿ä»ãã§ OAuth ãªãã€ã¬ã¯ã URL çæãç°¡çŽ å
-
Identity:
buildLockIdentityPayload: ã¢ã€ãã³ãã£ãã£ã»ãã¥ãªãã£çšã®æšæºåãããããã¯ãã€ããŒããäœæbuildUnlockIdentityPayload: ã¢ã€ãã³ãã£ãã£ã¢ã¯ã»ã¹åŸ©å çšã®æšæºåãããã¢ã³ããã¯ãã€ããŒããäœæ
Schemasâ
- Organization:
findChangeRequestsForOrganizationSchema: ããŒãžããŒã·ã§ã³ãµããŒãä»ãã®å€æŽãªã¯ãšã¹ãååŸ
- Identity:
lockIdentitySchema: ãã¹ãã©ã¡ãŒã¿ä»ãã®ã¢ã€ãã³ãã£ãã£ããã¯ãªã¯ãšã¹ãæ€èšŒunlockIdentitySchema: ãã¹ãã©ã¡ãŒã¿ä»ãã®ã¢ã€ãã³ãã£ãã£ã¢ã³ããã¯ãªã¯ãšã¹ãæ€èšŒ
- Product:
createProductVariantBulkSchema: é åæ€èšŒãšè£œåé¢é£ä»ããå«ã補åããªã¢ã³ãäžæ¬äœæã¹ããŒãcreateProductVariantSchema: å¿ é ã¿ã€ãã«æ€èšŒä»ãã®è£œåããªã¢ã³ãäœæfindProductVariantsSchema: ããŒãžããŒã·ã§ã³ãšè£œå ID æ€èšŒãå«ã補åããªã¢ã³ãååŸã¹ããŒãgetProductVariantSchema: ãã¹ãã©ã¡ãŒã¿ä»ãã®è£œåããªã¢ã³ãååŸupdateProductVariantSchema: ãªãã·ã§ã³ãã£ãŒã«ãä»ãã®è£œåããªã¢ã³ãæŽæ°deleteProductVariantSchema: ãã¹ãã©ã¡ãŒã¿ä»ãã®è£œåããªã¢ã³ãåé€
- Chat:
ChatChannelIcon: ãã£ãããã£ã³ãã«ã¢ã€ã³ã³ã¡ã¿ããŒã¿ã® TypeScript åchatChannelSchemaãæŽæ°: ããŒã¹ãã£ã³ãã«ã¹ããŒãã« icon ãã£ãŒã«ãã远åcreateChatChannelSchemaãæŽæ°: ãã£ã³ãã«äœæã« icon ãã£ãŒã«ããå¿ é ã«updateChatChannelSchemaãæŽæ°: ãã£ã³ãã«æŽæ°ã« icon ãã£ãŒã«ããµããŒãã远å
Routesâ
- Organization:
findChangeRequestsForOrganizationRoute: ããŒãžããŒã·ã§ã³ãšãã¡ã€ã« URL ãšã³ãªããã¡ã³ããå«ã GET/organizations/:organizationId/change-requests
- Product:
createProductVariantBulkRoute: 補åããªã¢ã³ããäžæ¬äœæããããã® POST/product/:productId/variants/bulkcreateProductVariantRoute: ããªã¢ã³ãäœæçšã® POST/products/:productId/variantsfindProductVariantsRoute: ããŒãžããŒã·ã§ã³ä»ãã§è£œåããªã¢ã³ãããªã¹ãããããã® GET/products/:productId/variantsgetProductVariantRoute: ããªã¢ã³ãååŸçšã® GET/products/:productId/variants/:productVariantIdupdateProductVariantRoute: ããªã¢ã³ãæŽæ°çšã® PATCH/products/:productId/variants/:productVariantIddeleteProductVariantRoute: ããªã¢ã³ãåé€çšã® DELETE/products/:productId/variants/:productVariantId
- Chat:
getChatChannelIconUploadUrlRoute: ãã£ã³ãã«ã¢ã€ã³ã³çšã®çœ²åä»ãã¢ããããŒã URL ãçæããããã® GET/channels/:channelId/icon-upload-url
Featuresâ
- Organization:
findChangeRequestsForOrganizationFeature: ããŒãžããŒã·ã§ã³ãšãã¡ã€ã« URL ãšã³ãªããã¡ã³ããå«ã倿Žãªã¯ãšã¹ãååŸ
- Product:
createProductVariantBulkFeature: ã¹ããŒãæ€èšŒãšã«ãŒãã£ã³ã°ãå«ã補åããªã¢ã³ãäžæ¬äœæcreateProductVariantFeature: æ€èšŒãšæ£èŠåãå«ã補åããªã¢ã³ãäœæfindProductVariantsFeature: ããŒãžããŒã·ã§ã³ãšããŒã¿æ£èŠåãå«ã補åããªã¢ã³ãååŸgetProductVariantFeature: æ€èšŒãšæ£èŠåãå«ã補åããªã¢ã³ãååŸupdateProductVariantFeature: éšåãã£ãŒã«ããµããŒãä»ãã®è£œåããªã¢ã³ãæŽæ°deleteProductVariantFeature: æ€èšŒä»ãã®è£œåããªã¢ã³ãåé€
- Chat:
getChannelIconUploadUrlFeature: ã¹ããŒãæ€èšŒãšã«ãŒãã£ã³ã°ãå«ããã£ãããã£ã³ãã«ã¢ã€ã³ã³ã¢ããããŒã URL çæupdateChatMessageTemplateFeature: éšåããŒã¿ãµããŒãä»ãã§æ¢åã®ãã£ããã¡ãã»ãŒãžãã³ãã¬ãŒããæŽæ°updateChatMessageTemplate: é©åãªæ€èšŒä»ãã§ãã£ããã¡ãã»ãŒãžãã³ãã¬ãŒããæŽæ°ããããŒã¿ããŒã¹ãããã¯deleteChatMessageTemplateFeature: èªå¯å¶åŸ¡ä»ãã§ãã£ããã¡ãã»ãŒãžãã³ãã¬ãŒããåé€deleteChatMessageTemplate: é©åãªæ€èšŒä»ãã§ãã£ããã¡ãã»ãŒãžãã³ãã¬ãŒããåé€ããããŒã¿ããŒã¹ãããã¯
- Identity:
lockIdentityFeature: 管çè èªå¯ãšã»ãã¥ãªãã£å¶åŸ¡ãå«ãã¢ã€ãã³ãã£ãã£ããã¯unlockIdentityFeature: ã¢ã¯ã»ã¹åŸ©å çšã®ç®¡çè èªå¯ä»ãã¢ã€ãã³ãã£ãã£ã¢ã³ããã¯
ð Changedâ
Developmentâ
- REPL: TypeScript ãµããŒããåäžããããããBabel ããŒã¹ã® REPL ã ts-node ã«çœ®ãæã
- Dependencies: Babel äŸåé¢ä¿ïŒ
@babel/cli,@babel/core,@babel/node,@babel/plugin-proposal-pipeline-operator,@babel/preset-envïŒãšbabel.config.jsonãåé€ - Build: ããã±ãŒãžã¹ã¯ãªããã babel-node ã®ä»£ããã« ts-node ã䜿çšããããã«æŽæ°
Handlersâ
- Chat: ãã£ã³ãã«ãã³ãã©ãŒïŒ
updateChatChannel,deleteChatChannel, terminatorsïŒãæŽæ°ããŠãã¢ã€ã³ã³ãã¡ã€ã«ã®ã¯ãªãŒã³ã¢ãããšæ£èŠåããµããŒã
OAuthâ
- OAuth Callback Routes: ãã¹ãŠã® OAuth ãããã€ããŒã³ãŒã«ããã¯ã«ãŒãïŒGoogle, LINE, TwitterïŒãã¯ã³ã¿ã€ã ããŒã¯ã³ã䜿çšããç°¡çŽ åããããããŒã«ãªãã¡ã¯ã¿ãªã³ã°
oauthCallbackTokenBehaviorèšå®ãªãã·ã§ã³ãåé€- ã³ãŒã«ããã¯ã«ãŒããæŽæ°ããŠãã¯ã³ã¿ã€ã ããŒã¯ã³ãäžè²«ããŠçæããã³ä¿å
generateRedirectURLãŠãŒãã£ãªãã£ããã¯ã³ã¿ã€ã ããŒã¯ã³ãªãã€ã¬ã¯ãã®ã¿ãåŠçããããã«ç°¡çŽ å
Servicesâ
- Authentication Service: OAuth ã³ãŒã«ããã¯ããŒã¯ã³ã®åäœãåé€ããããé·ãããã©ã«ãã®ã¯ã³ã¿ã€ã ããŒã¯ã³æå¹æéãèšå®ããããã«èšå®ãæŽæ°
oauth.oauthCallbackTokenBehaviorèšå®ãªãã·ã§ã³ãåé€onetimeTokenExpireTimeã®ããã©ã«ãã '2h' ãã '48h' ã«æŽæ°
- Identity Service: ããã¯/ã¢ã³ããã¯æ©èœãå«ãå®å
šãªã¢ã€ãã³ãã£ãã£ã©ã€ããµã€ã¯ã«ç®¡çã§åŒ·å
- ã¢ã«ãŠã³ãã»ãã¥ãªãã£ç®¡çã®ããã®
lockIdentityFeatureãšunlockIdentityFeatureã远å - äžè²«æ§ã®ãããæ©èœåãè€æ°åœ¢ããåæ°åœ¢ã«æŽæ°ïŒäŸ:
getIdentityFeaturesâgetIdentityFeatureïŒ
- ã¢ã«ãŠã³ãã»ãã¥ãªãã£ç®¡çã®ããã®
Removedâ
- User Service: ããã¯/ã¢ã³ããã¯æ©èœã Identity Service ã«ç§»å
lockUser,unlockUser,lockUserTerminator,unlockUserTerminatorãã³ãã©ãŒãåé€lockUserRoute,unlockUserRouteã«ãŒããåé€lockUserSchema,unlockUserSchemaã¹ããŒããåé€lockUserFeatures,unlockUserFeaturesæ©èœãåé€- ç§»è¡: Identity Service ãšã³ããã€ã³ã
POST /identities/:identityId/lockãšPOST /identities/:identityId/unlockã䜿çšããŠãã ãã
- Chat: ã¡ãã»ãŒãžæ£èŠå颿°ããªãã¡ã¯ã¿ãªã³ã°
normalizeAttachmentsOfChatMessageãåé€ - æ©èœã¯normalizeChatMessageã«çµ±åãããŸããnormalizeAttachmentsOfChatMessagesãåé€ - æ©èœã¯normalizeChatMessagesã«çµ±åãããŸãã- ç§»è¡: éåææ·»ä»ãã¡ã€ã«åŠçãå«ãæŽæ°ããã
normalizeChatMessageãšnormalizeChatMessages颿°ã䜿çšããŠãã ãã
Blocksâ
- Product:
createProductVariantBulkã匷åããŠãèªå補åé¢é£ä»ãã®ããã®productIdãã©ã¡ãŒã¿ãåãå ¥ããããã«ããŸãã - Product: åäžã®ããŒã¿ããŒã¹æäœã§è€æ°ã®è£œåããªã¢ã³ããäžæ¬æŽæ°ããããã®
updateProductVariantBulkã远å - Product: æ€èšŒä»ãã§è€æ°ã®è£œåããªã¢ã³ããäžæ¬åé€ããããã®
deleteProductVariantBulkã远å - Product: ãªãã·ã§ãã«ãã§ãŒã³ã䜿çšããŠ
buildFilterToGetProductVariantsByIdsã® null å®å šæ§ãä¿®æ£ - Product:
findResourcesãŠãŒãã£ãªãã£ã䜿çšããŠæè»ãªãã£ã«ã¿ãªã³ã°ã§è£œåã³ã¬ã¯ã·ã§ã³ãã¯ãšãªããããã®findProductResourcesã远å - Product: ç¹å®ã®è£œåãããããããŠãŒã¶ãŒãèŠã€ããããã® MongoDB ãã£ã«ã¿ãŒãæ§ç¯ãã
buildProductLikersByLikeProductIdQueryã远å - Chat:
normalizeChatMessageãšnormalizeChatMessagesã匷åããŠã眲åä»ã URL çæãå«ãéåææ·»ä»ãã¡ã€ã«åŠçãå«ããããã«ããŸãã - Chat:
normalizeChatMessageStreamãæŽæ°ããŠãæ°ããéåææ£èŠå颿°ã§åäœããããã«ããŸãã - Location: éå±€é¢ä¿ç®¡çãå«ãå®å
šãª location ãããã¯ã¢ãžã¥ãŒã«ã远å :
LocationBlockError,LocationNotFoundBlockError,LocationUnexpectedDBErrorãšã©ãŒã¯ã©ã¹buildAncestorsFromParentã§ç¥å ãã§ãŒã³ãæ§ç¯buildLocationToCreateã§ãã±ãŒã·ã§ã³ããŒã¿ãæ£èŠågetLocationByIdã§ãã±ãŒã·ã§ã³ãååŸcreateLocationã§ãã±ãŒã·ã§ã³ãæ°žç¶å
- Location: åé€ãµããŒããšéå±€æ€èšŒãå«ã location ãããã¯ã¢ãžã¥ãŒã«ã匷å:
LocationConflictErrorã§éå±€å¶çŽã®ç«¶åãåŠçbuildDescendantsFilterã§éå±€å ã®åå«ãã±ãŒã·ã§ã³ãæ€çŽ¢assertNoDescendantLocationsã§åãã±ãŒã·ã§ã³ãååšããªãããšãæ€èšŒdeleteLocationã§æ€èšŒä»ãã§ãã±ãŒã·ã§ã³ãåé€findLocationsã§èªåãã£ãŒã«ãæåœ±ä»ãã§æè»ãªãã±ãŒã·ã§ã³ã¯ãšãªnormalizeLocationã§å éš MongoDB ãã£ãŒã«ãã API ãã¬ã³ããªãŒãªåœ¢åŒã«å€æ
Routesâ
- Product:
deleteProductRouteãæŽæ°ããŠã補åãåé€ããããšãã«èªåçã«ç»åãã¯ãªãŒã³ã¢ããããããã«ããŸãã - Product:
createProductVariantBulkRouteãæŽæ°ããŠããªã¯ãšã¹ãããã£ã§ã¯ãªããã¹ãã©ã¡ãŒã¿ãšããŠproductIdãåãå ¥ããããã«ããŸãã - Product: PATCH
/product/:productId/variants/bulkäžæ¬æŽæ°ãšã³ããã€ã³ãçšã®updateProductVariantBulkRouteã远å - Product: POST
/product/:productId/variants/bulk-deleteäžæ¬åé€ãšã³ããã€ã³ãçšã®deleteProductVariantBulkRouteã远å - Product: GET
/products/organizations/:organizationIdçµç¹ã¹ã³ãŒãã®è£œåååŸçšã®findProductsByOrganizationIdRouteã远å - Product: ã¢ãã¿ãŒæ£èŠåä»ãã§ GET
/products/:productId/likers補åããããŠãŒã¶ãŒååŸçšã®getProductLikersRouteã远å - Location: éå±€çãªèŠªãµããŒããšç¥å
æ§ç¯ãå«ã POST
/locationsçšã®createLocationRouteã远å - Location: ãããªãã¯ã¢ã¯ã»ã¹ãšãã±ãŒã·ã§ã³æ€çŽ¢ãå«ã GET
/locations/:locationIdçšã®getLocationRouteã远å - Location: éå±€æ€èšŒãšç®¡çè
èªèšŒãå«ã DELETE
/locations/:locationIdçšã®deleteLocationRouteã远å - Location: ããŒãžããŒã·ã§ã³ãµããŒããšãããªãã¯ã¢ã¯ã»ã¹ãå«ã GET
/locationsçšã®findLocationsRouteã远å - Location: 管çè
èªèšŒãšéšåæŽæ°ãå«ã PATCH
/locations/:locationIdçšã®updateLocationRouteã远å
Schemasâ
- Product:
createProductVariantBulkSchemaãæŽæ°ããŠãproductIdãã¹ãã©ã¡ãŒã¿ãæ€èšŒããåå¥ã®ããªã¢ã³ãã¢ã€ãã ãã productId ãåé€ããããã«ããŸãã - Product: äžæ¬è£œåããªã¢ã³ãæŽæ°æ€èšŒçšã®
updateProductVariantBulkSchemaã远å - Product: äžæ¬è£œåããªã¢ã³ãå逿€èšŒçšã®
deleteProductVariantBulkSchemaã远å - Product: 補å ID ãã¹ãã©ã¡ãŒã¿æ€èšŒä»ãã§è£œåããããŠãŒã¶ãŒååŸçšã®
getProductLikersSchemaã远å - Location: å®å
šãª location ã¹ããŒãã¢ãžã¥ãŒã«ã远å :
locationSchemaã³ã¢ãã±ãŒã·ã§ã³ããããã£ãå«ãããŒã¹ã¹ããŒãcreateLocationSchema芪ãµããŒãä»ãã®ãã±ãŒã·ã§ã³äœææ€èšŒgetLocationSchemaãã¹ãã©ã¡ãŒã¿ä»ãã®ãã±ãŒã·ã§ã³ååŸæ€èšŒupdateLocationSchemaãªãã·ã§ã³ãã£ãŒã«ãä»ãã®ãã±ãŒã·ã§ã³æŽæ°æ€èšŒdeleteLocationSchemaãã¹ãã©ã¡ãŒã¿ä»ãã®ãã±ãŒã·ã§ã³å逿€èšŒfindLocationsSchemaããŒãžããŒã·ã§ã³ãã©ã¡ãŒã¿ä»ãã®ãã±ãŒã·ã§ã³æ€çŽ¢æ€èšŒ
Featuresâ
- Product:
createProductVariantBulkFeatureãæŽæ°ããŠã補åé¢é£ä»ãã«ãã¹ãã©ã¡ãŒã¿ã䜿çšããããã«ããŸãã - Product: æ€èšŒãšã«ãŒãã£ã³ã°ãå«ãäžæ¬è£œåããªã¢ã³ãæŽæ°çšã®
updateProductVariantBulkFeatureã远å - Product: æ€èšŒãšã«ãŒãã£ã³ã°ãå«ãäžæ¬è£œåããªã¢ã³ãåé€çšã®
deleteProductVariantBulkFeatureã远å - Product: ç»åæ£èŠåãšããŒãžããŒã·ã§ã³ãå«ãçµç¹ã¹ã³ãŒãã®è£œåååŸçšã®
findProductsByOrganizationIdFeatureã远å - Product: ã¢ãã¿ãŒæ£èŠåãšããŒãžããŒã·ã§ã³ãå«ãç¹å®ã®è£œåãããããããŠãŒã¶ãŒãååŸããããã®
getProductLikersFeatureã远å - Location: 芪åé¢ä¿ãå«ãéå±€çãã±ãŒã·ã§ã³äœæçšã®
createLocationFeatureã远å - Location: ã¹ããŒãæ€èšŒãšãããªãã¯ã«ãŒãã£ã³ã°ãå«ããã±ãŒã·ã§ã³ååŸçšã®
getLocationFeatureã远å - Location: ã¹ããŒãæ€èšŒãšç®¡çè
ã«ãŒãã£ã³ã°ãå«ããã±ãŒã·ã§ã³æŽæ°çšã®
updateLocationFeatureã远å - Location: ã¹ããŒãæ€èšŒãšéå±€æ€èšŒã«ãŒãã£ã³ã°ãå«ããã±ãŒã·ã§ã³åé€çšã®
deleteLocationFeatureã远å - Location: ã¹ããŒãæ€èšŒãšããŒãžããŒã·ã§ã³ã«ãŒãã£ã³ã°ãå«ããã±ãŒã·ã§ã³æ€çŽ¢çšã®
findLocationsFeatureã远å - User:
deleteUserRouteãæŽæ°ããŠããŠãŒã¶ãŒãåé€ããããšãã«èªåçã«ã¢ãã¿ãŒãã¯ãªãŒã³ã¢ããããããã«ããŸãã
Servicesâ
Organization Service: 倿Žãªã¯ãšã¹ãååŸæ©èœã§åŒ·å- çµç¹å€æŽãªã¯ãšã¹ããååŸããããã®
findChangeRequestsForOrganizationFeatureã远å - 倿Žãªã¯ãšã¹ãã¹ãã¬ãŒãžçšã®
organizationChangeRequestsã³ã¬ã¯ã·ã§ã³ïŒãªãã·ã§ã³ïŒã远å
- çµç¹å€æŽãªã¯ãšã¹ããååŸããããã®
Location Service: æ°ããéå±€çãã±ãŒã·ã§ã³ç®¡çãµãŒãã¹ã远å- 芪åé¢ä¿ãšç¥å 远跡ãå«ãå®å šãªãã±ãŒã·ã§ã³ CRUD
- è€æ°ã®ãã±ãŒã·ã§ã³ã¿ã€ãïŒORGANIZATION, REGION, CITY, BUILDINGïŒã®ãµããŒã
- å æ¬çãªãšã©ãŒãã³ããªã³ã°ãå«ã管çè å°çšã¢ã¯ã»ã¹å¶åŸ¡
- ããŒãžããŒã·ã§ã³ä»ãã® GET
/organizations/:organizationId/change-requestsãšã³ããã€ã³ãã远å - 倿Žãªã¯ãšã¹ãã«ã¯èªåèšŒææžç»å URL çæãå«ãŸããŸã
Product Service: å®å šãªè£œåããªã¢ã³ã管çã§åŒ·å- 補åããªã¢ã³ããäœæããããã®
createProductVariantFeatureã远å - åå¥ã®ããªã¢ã³ããååŸããããã®
getProductVariantFeatureã远å - éšåçãªããªã¢ã³ãæŽæ°ã®ããã®
updateProductVariantFeatureã远å - ããªã¢ã³ãåé€ã®ããã®
deleteProductVariantFeatureã远å - ããªã¢ã³ãã¹ãã¬ãŒãžçšã®
productVariantsã³ã¬ã¯ã·ã§ã³ïŒãªãã·ã§ã³ïŒã远å - ããªã¢ã³ãäœæçšã® POST
/products/:productId/variantsã远å - ããªã¢ã³ãååŸçšã® GET
/products/:productId/variants/:productVariantIdã远å - ããªã¢ã³ãæŽæ°çšã® PATCH
/products/:productId/variants/:productVariantIdã远å - ããªã¢ã³ãåé€çšã® DELETE
/products/:productId/variants/:productVariantIdã远å - ããªã¢ã³ãã«ã¯ã¬ã¹ãã³ã¹ã§èªå MongoDB
_idãã£ãŒã«ãåé€ãå«ãŸããŸã
- 補åããªã¢ã³ããäœæããããã®
Blocksâ
- Product:
createProductVariantãæŽæ°ããŠãäžè²«ãããšã³ãã£ãã£äœæã®ããã«createBaseEntityWithDelFlgã䜿çšããããã«ããŸãã- é©åãªãšã©ãŒãã³ããªã³ã°ãšæ€èšŒãå«ãããªã¢ã³ã CRUD æäœã匷å
2025-10-24â
ð Fixedâ
Timestamp Consistencyâ
- ããŒã¿ããŒã¹æäœã«äžè¶³ããŠããã¿ã€ã ã¹ã¿ã³ãã远å :
createdAtãšupdatedAtã¿ã€ã ã¹ã¿ã³ãããã¹ãŠã®ããŒã¿ããŒã¹æžãèŸŒã¿æäœã§èªåçã«è¿œå /æŽæ°ãããŠããªãã£ãäžæŽåãä¿®æ£createChatMessageAttachmentãæŽæ°ããŠãã¡ãã»ãŒãžé åã«æ·»ä»ãã¡ã€ã«ã远å ãããšãã«updatedAtã¿ã€ã ã¹ã¿ã³ããå«ããããã«ããŸããcreateProductImageãæŽæ°ããŠã補åé åã«ç»åã远å ãããšãã«updatedAtã¿ã€ã ã¹ã¿ã³ããå«ããããã«ããŸããdeleteOrganizationMemberãæŽæ°ããŠãçµç¹ããã¡ã³ããŒãåé€ãããšãã«updatedAtã¿ã€ã ã¹ã¿ã³ããå«ããããã«ããŸãã- ãã¹ãŠã®äœææäœã¯ãèªåã¿ã€ã ã¹ã¿ã³ãçæã®ããã«
createBaseEntity()ãã«ããŒãäžè²«ããŠäœ¿çšããããã«ãªããŸãã - ãã¹ãŠã®æŽæ°æäœã¯ãèªåã¿ã€ã ã¹ã¿ã³ãæŽæ°ã®ããã«
updateBaseEntity()ãã«ããŒãäžè²«ããŠäœ¿çšããããã«ãªããŸãã - ãã¹ãŠã®ãšã³ãã£ãã£å€æŽã®ããŒã¿æŽåæ§ãšé©åãªç£æ»èšŒè·¡ã確ä¿ããŸã
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!276 ãåç §
ð± Refactorâ
File Deletion Error Handlingâ
- deleteFile ãšã©ãŒãã³ããªã³ã°ããªãã¡ã¯ã¿ãªã³ã°: ã¢ãžã¥ãŒã«åºæã®ãšã©ãŒã§ã©ãããã代ããã«ã
FileStorageServiceErrorãçŽæ¥è¿ãããšã§ãšã©ãŒäŒæãç°¡çŽ å- Avatar Blocks ãæŽæ°:
deleteAvatarIfReplaced-AvatarBlockErrorã®ä»£ããã«Result<T, FileStorageServiceError>ãè¿ãããã«ãªããŸãã
- User Blocks ãæŽæ°:
deleteAvatar-UserBlockErrorã®ä»£ããã«Result<true, FileStorageServiceError>ãè¿ãããã«ãªããŸãã
- Organization Blocks ãæŽæ°:
deleteLogoIfReplaced颿°ãåé€ïŒãã³ãã©ãŒã§çŽæ¥deleteFileã䜿çšããããã«çœ®ãæãïŒdeleteLogoOfOwner-OrganizationBlockErrorã®ä»£ããã«Result<true, FileStorageServiceError>ãè¿ãããã«ãªããŸãã
- Product Blocks ãæŽæ°:
deleteImagesOfProduct-Result<true, FileStorageServiceError | ProductNotFoundBlockError | ProductUnexpectedDBError>ãè¿ãããã«ãªãã䞊åãã¡ã€ã«åé€ãšã©ãŒãã³ããªã³ã°ã«Result.combineã䜿çšããŸã
- Chat Channel Handlers ãæŽæ°:
updateChatChannel- ããã¯ãªãŒã³ãªãšã©ãŒæ§æã®ããã«Resultåãšmapã䜿çšããããã«ãªãã¡ã¯ã¿ãªã³ã°deleteChatChannel- ããã¯ãªãŒã³ãªãšã©ãŒæ§æã®ããã«Resultåãšmapã䜿çšããããã«ãªãã¡ã¯ã¿ãªã³ã°
- User Routes ãæŽæ°:
updateUserRoute- ãšã©ãŒã¬ã¹ãã³ã¹ïŒ500 ã¹ããŒã¿ã¹ïŒã«FileStorageServiceErrorã远å
- Product Routes ãæŽæ°:
deleteProductRoute- ãšã©ãŒã¬ã¹ãã³ã¹ïŒ500 ã¹ããŒã¿ã¹ïŒã«FileStorageServiceErrorãå«ãã
- çç±: ããã¯ãªãŒã³ãªãšã©ãŒäŒæãããè¯ãåå®å šæ§ãSDK å šäœã§ããäžè²«ãããšã©ãŒãã³ããªã³ã°ãã¿ãŒã³
- å©ç¹: åŒã³åºãåŽã¯äžèŠãªã©ããã³ã°ãªãã§ã¹ãã¬ãŒãžåºæã®ãšã©ãŒãçŽæ¥åãåããããè¯ããšã©ãŒãã³ããªã³ã°ã®æ±ºå®ãå¯èœã«ããŸã
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!279 ãåç §
- Avatar Blocks ãæŽæ°:
2025-10-15â
ð± Refactorâ
Logger Parameter Removalâ
- ãããã¯é¢æ°ãã logger ãã©ã¡ãŒã¿ãåé€: SDK å
šäœã§ãããã¯é¢æ°ãã logger ãã©ã¡ãŒã¿ãåé€ããäœç³»çãªãªãã¡ã¯ã¿ãªã³ã°
- User Blocks ããªãã¡ã¯ã¿ãªã³ã°:
getUserById- logger ãã©ã¡ãŒã¿ãåé€deleteAvatar- logger ãã©ã¡ãŒã¿ãåé€
- Profile Blocks ããªãã¡ã¯ã¿ãªã³ã°:
normalizeFollowers- logger ãã©ã¡ãŒã¿ãåé€
- File Storage Blocks ããªãã¡ã¯ã¿ãªã³ã°:
generateSignedUploadUrl- logger ãã©ã¡ãŒã¿ãåé€generateSignedDownloadUrl- logger ãã©ã¡ãŒã¿ãåé€generateSignedDeleteUrl- logger ãã©ã¡ãŒã¿ãåé€generateSignedAvatarUploadUrl- logger ãã©ã¡ãŒã¿ãåé€generateFileUploadUrl- logger ãã©ã¡ãŒã¿ãåé€deleteFile- logger ãã©ã¡ãŒã¿ãåé€normalizeFile- logger ãã©ã¡ãŒã¿ãåé€
- Avatar Blocks ããªãã¡ã¯ã¿ãªã³ã°:
normalizeAvatarOfOwner- logger ãã©ã¡ãŒã¿ãåé€normalizeAvatarsOfOwners- logger ãã©ã¡ãŒã¿ãåé€deleteAvatarIfReplaced- logger ãã©ã¡ãŒã¿ãåé€
- Organization Blocks ããªãã¡ã¯ã¿ãªã³ã°:
normalizeCertificateImage- logger ãã©ã¡ãŒã¿ãåé€normalizeCertificateImages- logger ãã©ã¡ãŒã¿ãåé€normalizeLogoOfOwner- logger ãã©ã¡ãŒã¿ãåé€normalizeLogosOfOwners- logger ãã©ã¡ãŒã¿ãåé€normalizeLogosOfPaginatedOwners- logger ãã©ã¡ãŒã¿ãåé€deleteLogoIfReplaced- logger ãã©ã¡ãŒã¿ãåé€ïŒé¢æ°ã¯ 2025-10-24 ã§åŸã»ã©åé€ãããŸããïŒdeleteLogoOfOwner- logger ãã©ã¡ãŒã¿ãåé€normalizeChangeRequest- logger ãã©ã¡ãŒã¿ãåé€normalizeChangeRequests- logger ãã©ã¡ãŒã¿ãåé€
- Product Blocks ããªãã¡ã¯ã¿ãªã³ã°:
generateProductImageUploadUrl- logger ãã©ã¡ãŒã¿ãåé€createProductImage- logger ãã©ã¡ãŒã¿ãåé€getProductById- logger ãã©ã¡ãŒã¿ãåé€getProductImageById- logger ãã©ã¡ãŒã¿ãåé€findProducts- logger ãã©ã¡ãŒã¿ãåé€normalizeProductImage- logger ãã©ã¡ãŒã¿ãåé€normalizeImagesOfProduct- logger ãã©ã¡ãŒã¿ãåé€normalizeImagesOfProducts- logger ãã©ã¡ãŒã¿ãåé€deleteProductImage- logger ãã©ã¡ãŒã¿ãåé€deleteImagesOfProduct- logger ãã©ã¡ãŒã¿ãåé€
- Chat Blocks ããªãã¡ã¯ã¿ãªã³ã°:
generateChatChannelIconUploadUrl- logger ãã©ã¡ãŒã¿ãåé€normalizeChatChannel- logger ãã©ã¡ãŒã¿ãåé€findChatMessages- logger ãã©ã¡ãŒã¿ãåé€createChatMessage- logger ãã©ã¡ãŒã¿ãåé€getChatMessageById- logger ãã©ã¡ãŒã¿ãåé€normalizeChatMessage- logger ãã©ã¡ãŒã¿ãåé€normalizeChatMessages- logger ãã©ã¡ãŒã¿ãåé€normalizeChatMessageAttachment- logger ãã©ã¡ãŒã¿ãåé€normalizeChatMessageStream- logger ãã©ã¡ãŒã¿ãåé€generateChatMessageAttachmentUploadUrl- logger ãã©ã¡ãŒã¿ãåé€createChatMessageAttachment- logger ãã©ã¡ãŒã¿ãåé€getChatMessageAttachmentById- logger ãã©ã¡ãŒã¿ãåé€deleteChatMessageAttachment- logger ãã©ã¡ãŒã¿ãåé€
- ã«ãŒãæ§æãæŽæ°ããŠã
applyPayloadArgsåŒã³åºããã['logger']ãåé€:- Profile Routes ãæŽæ°
- Organization Routes ãæŽæ°
- çç±: logger äŸåé¢ä¿ãåé€ããããšã§é¢æ°ã·ã°ããã£ãç°¡çŽ å; ãšã©ãŒãã³ããªã³ã°ã¯æç€ºçãªãã°èšé²ãªãã§ try-catch ã䜿çšããããã«ãªããŸãã
- ããŒãžãªã¯ãšã¹ã nodeblocks/nodeblocks-backend-sdk!d3bb0f2d ãåç §
- User Blocks ããªãã¡ã¯ã¿ãªã³ã°:
2025-10-10â
2025-09-11â
ð¥ Demo Videoâ
ð¹ NodeBlocks Backend SDK v0.6.0 Demo - ãã¹ãŠã®æ°æ©èœãšæ©èœã®å®å šãªãŠã©ãŒã¯ã¹ã«ãŒ
âš Addedâ
Blocksâ
- Chat:
createChatMessageTemplate: çµç¹ã¢ã¯ã»ã¹å¶åŸ¡ä»ãã§æ°ãããã£ããã¡ãã»ãŒãžãã³ãã¬ãŒããäœægetChatMessageTemplateById: æ€èšŒä»ãã§ ID ã§ç¹å®ã®ã¡ãã»ãŒãžãã³ãã¬ãŒããååŸcreateChatChannelReadState: ããŒã¿ããŒã¹ã«ãã£ãããã£ã³ãã«èªã¿åãç¶æ ãšã³ãã£ãã£ãäœæupdateChatChannelReadState: æ¢åã®ãã£ãããã£ã³ãã«èªã¿åãç¶æ ãæŽæ°findChatChannelReadStates: ãã£ã«ã¿ãŒæ¡ä»¶ä»ãã§ãã£ãããã£ã³ãã«èªã¿åãç¶æ ãæ€çŽ¢buildChatChannelReadStateQuery: ãã£ã³ãã«ãšã¢ã€ãã³ãã£ãã£ã§èªã¿åãç¶æ ãæ€çŽ¢ããã¯ãšãªãªããžã§ã¯ããæ§ç¯buildLastReadMessageQuery: æåŸã«èªãã ã¡ãã»ãŒãžãæ€çŽ¢ããã¯ãšãªãªããžã§ã¯ããæ§ç¯buildCreateChatChannelReadStatePayload: èªã¿åãç¶æ ãšã³ãã£ãã£ãäœæãããã€ããŒããæ§ç¯buildUpdateChatChannelReadStatePayload: èªã¿åãç¶æ ãšã³ãã£ãã£ãæŽæ°ãããã€ããŒããæ§ç¯- Error Classes:
ChatMessageBlockError,ChatMessageDbError,ChatMessageUnauthorizedError,ChatMessageForbiddenError,ChatMessageNotFoundError,ChatMessageInvalidMessageError,ChatMessageUnknownError,ChatMessageBadRequestError,ChatChannelReadStateBlockError,ChatChannelReadStateNotFoundError,ChatChannelReadStateDatabaseError,ChatChannelReadStateUnknownError
- Chat:
createChatMessage: æ·»ä»ãã¡ã€ã«ãšèªåããŒã¹ãšã³ãã£ãã£çæãå«ãæ°ãããã£ããã¡ãã»ãŒãžãäœægetChatMessageById: äžæã®èå¥åã§ãã£ããã¡ãã»ãŒãžãååŸnormalizeChatMessage: MongoDB _id ãã£ãŒã«ããåé€ãã眲åä»ã URL ã§æ·»ä»ãã¡ã€ã«ãåŠçããŠåäžã®ã¡ãã»ãŒãžãæ£èŠånormalizeChatMessages: MongoDB _id ãã£ãŒã«ããåé€ããæ·»ä»ãã¡ã€ã«ãåŠçããŠè€æ°ã®ã¡ãã»ãŒãžãæ£èŠånormalizeChatMessageAttachment: 眲åä»ãããŠã³ããŒã URL ã§æ·»ä»ãã¡ã€ã«ãæ£èŠågenerateChatMessageAttachmentUploadUrl: ã»ãã¥ãªãã£ãã£ã«ã¿ãªã³ã°ä»ãã§ãã£ããã¡ãã»ãŒãžæ·»ä»ãã¡ã€ã«çšã®çœ²åä»ãã¢ããããŒã URL ãçæcreateChatMessageAttachment: èªåããŒã¹ãšã³ãã£ãã£çæä»ãã§æ¢åã®ã¡ãã»ãŒãžã«æ·»ä»ãã¡ã€ã«ã远ågetChatMessageAttachmentById: ID ã§ã¡ãã»ãŒãžããç¹å®ã®æ·»ä»ãã¡ã€ã«ãååŸdeleteChatMessageAttachment: ã¡ãã»ãŒãžããæ·»ä»ãã¡ã€ã«ãåé€ããã¹ãã¬ãŒãžãããã¡ã€ã«ãåé€- Error Classes:
ChatMessageNotFoundBlockError,ChatMessageUnexpectedDBError,ChatMessageAttachmentNotFoundBlockError
- Product:
getProductById: ãšã©ãŒãã³ããªã³ã°ä»ãã§ products ã³ã¬ã¯ã·ã§ã³ãã ID ã§è£œåãååŸfindProducts: ãã£ã«ã¿ãŒæ¡ä»¶ã«åºã¥ããŠããŒã¿ããŒã¹ã³ã¬ã¯ã·ã§ã³ãã補åãååŸnormalizeProduct: 補åãšã³ãã£ãã£ãã _id ãã£ãŒã«ããåé€ããŠåäžã®è£œåãæ£èŠånormalizeProducts: å補åãšã³ãã£ãã£ãã _id ãã£ãŒã«ããåé€ããŠè€æ°ã®è£œåãæ£èŠånormalizeProductImage: 眲åä»ãããŠã³ããŒã URL ãçæããŠåäžã®è£œåç»åãæ£èŠånormalizeImagesOfProduct: 眲åä»ã URL ã§åäžã®è£œåã®ç»åãæ£èŠånormalizeImagesOfProducts: 眲åä»ã URL ã§è€æ°ã®è£œåã®ç»åãæ£èŠå
- OAuth:
requestLineOAuth: ã¹ããŒãããŒã¯ã³çæä»ãã§ LINE OAuth èªèšŒãããŒãéå§authenticateLineOAuth: ãããã€ããŒã³ãŒã«ããã¯ãåŒã³åºã㊠LINE ãŠãŒã¶ãŒãèªèšŒverifyLineOAuth: LINE OAuth ãããã£ãŒã«ãæ€èšŒããã¢ã€ãã³ãã£ãã£ã解決ãŸãã¯äœæ
- Utils:
BaseEntity: idãcreatedAtãupdatedAt ãã£ãŒã«ããå«ã TypeScript åå®çŸ©
Schemasâ
- Chat:
createChatMessageTemplateSchema: ãã³ãã¬ãŒãäœæãªã¯ãšã¹ããæ€èšŒgetChatMessageTemplateSchema: ãã³ãã¬ãŒã ID ãã¹ãã©ã¡ãŒã¿ãæ€èšŒ
Routesâ
- Chat:
createChatMessageTemplateRoute: POST/message-templates- ã¡ãã»ãŒãžãã³ãã¬ãŒããäœægetChatMessageTemplateRoute: GET/message-templates/:messageTemplateId- ID ã§ãã³ãã¬ãŒããååŸ
Featuresâ
- Chat:
createChatMessageTemplateFeature: ãã³ãã¬ãŒãäœæã®æ§æã¯ãŒã¯ãããŒgetChatMessageTemplateFeature: ãã³ãã¬ãŒãååŸã®æ§æã¯ãŒã¯ãããŒ
Driversâ
- OAuth:
createTwitterOAuthDriver: Twitter OAuth çšã® Passport æŠç¥ãèšå®verifyTwitterCallback: Twitter OAuth çšã® Passport æ€èšŒã³ãŒã«ããã¯
Validatorsâ
- Chat:
hasOrganizationAccessToMessageTemplate: ã¡ãã»ãŒãžãã³ãã¬ãŒããžã®çµç¹ã¢ã¯ã»ã¹ãæ€èšŒ
Utilitiesâ
- RxJS:
notFromEmitter: ç¹å®ã®ãšããã¿ãŒã€ã³ã¹ã¿ã³ã¹ããã®ã¡ãã»ãŒãžããã£ã«ã¿ãªã³ã°ãã RxJS è¿°èªmarkAsFromEmitter: ç¹å®ã®ãšããã¿ãŒã€ã³ã¹ã¿ã³ã¹ããçºä¿¡ãããã¡ãã»ãŒãžãšããŠããŒã¯
ð Changedâ
Servicesâ
Authentication Service: Twitter OAuth ãµããŒããšãªãã¬ãã·ã¥ããŒã¯ã³æ©èœã远å- ãµãŒãã¹èšå®ã«
twitterOAuthDriverãã©ã¡ãŒã¿ã远å - ã«ãŒãæ§æã« Twitter OAuth ãšã³ããã€ã³ãã远å
- ãœããå逿©èœãå«ããªãã¬ãã·ã¥ããŒã¯ã³ã·ã¹ãã ã匷å
- ããŒã¿ã¹ãã¢èšå®ãæŽæ°ããŠ
chatMessageTemplatesã³ã¬ã¯ã·ã§ã³ãå«ãã
- ãµãŒãã¹èšå®ã«
Primitivesâ
- Service Infrastructure:
defServiceã匷åã㊠WebSocket ãµãŒããŒçµ±åããµããŒã- ãªã¢ã«ã¿ã€ã éä¿¡ã®ããã® RxJS ããªããžã³ã°ä»ã WebSocket ã«ãŒãåŠçã远å
- ãšããã¿ãŒããŒã¹ã®ã¡ãã»ãŒãžãã£ã«ã¿ãªã³ã°ãå«ã WebSocket æ¥ç¶ç®¡çãå®è£
- HTTP ã«ãŒããšäžŠè¡ããŠ
protocol: 'ws'ã«ãŒãã®ãµããŒãã远å
Route Definitions:â
- WebSocket Routing:
withRouteãµããŒãã WebSocket ãããã³ã«ã«ãŒãã«è¿œå- WebSocket ãšã³ããã€ã³ããå®çŸ©ããããã®
protocol: 'ws'ãªãã·ã§ã³ãæå¹å - æ¢åã®ã«ãŒãæ§æã·ã¹ãã ã« WebSocket ãã³ãã©ãŒãçµ±å
Blocksâ
- Chat:
- çµç¹ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãå«ãã¡ãã»ãŒãžãã³ãã¬ãŒããããã¯ã匷å
- ãã³ãã¬ãŒã管çã®ããã®ãœããå逿©èœã远å
- ãã³ãã¬ãŒãæäœã®æ€èšŒãšãšã©ãŒãã³ããªã³ã°ãæ¹å
Driversâ
- OAuth:
createGoogleOAuthDriver: ãã«ããããã€ããŒãµããŒãã§åŒ·å- Twitter OAuth ãã©ã€ããŒçµ±åã远å
- OAuth ãããŒã®ã»ãã·ã§ã³ããŒã¹ã®ç¶æ 管çãæ¹å
Validatorsâ
- Chat:
- ã¡ãã»ãŒãžãã³ãã¬ãŒãã®çµç¹ã¢ã¯ã»ã¹æ€èšŒã匷å
- ãšã©ãŒãã³ããªã³ã°ãšæ€èšŒã¡ãã»ãŒãžãæ¹å
ð Fixedâ
Servicesâ
Authentication Service:- ãªãã¬ãã·ã¥ããŒã¯ã³ã«ãŒãæ€èšŒãä¿®æ£ïŒisAuthenticated æ€èšŒãåé€ïŒ
- èšå®ããããã£åãä¿®æ£ïŒ
user.typeIdsâidentity.typeIdsïŒ - åå®çŸ©ãä¿®æ£ïŒ
user?: stringâregular?: stringïŒ - ãã¹ãŠã®ãµãŒãã¹ã¯ã€ãã¯ã¹ã¿ãŒãäŸãæ£ããããããã£åã§æŽæ°
Driversâ
- File Storage:
- Google Cloud ã¹ãã¬ãŒãžãã¹ãã¢ãã¯å®è£ ãä¿®æ£
- ãã¹ãç°å¢ã®ã¯ãã¹ãã©ãããã©ãŒã äºææ§ãæ¹å
Blocksâ
- Organization:
- çµç¹ãããã¯ãšã¯ã¹ããŒãã®åé¡ãä¿®æ£
- ã¢ãžã¥ãŒã«ã®æŽçãšãšã¯ã¹ããŒããæ¹å
Configurationâ
- ãã¹ãŠã®ãµãŒãã¹ã§ããããã£åã®äžæŽåãä¿®æ£:
- èšå®ã€ã³ã¿ãŒãã§ãŒã¹ã§
user.typeIdsâidentity.typeIds - åå®çŸ©ã§
user?: stringâregular?: string - ãã¹ãŠã®äŸã®èšå®ãšããã¥ã¡ã³ããæŽæ°
- èšå®ã€ã³ã¿ãŒãã§ãŒã¹ã§