@monorise/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/configs/service.config.ts +14 -0
- package/constants/table.ts +3 -0
- package/controllers/entity/create-entity.controller.ts +51 -0
- package/controllers/entity/delete-entity.controller.ts +35 -0
- package/controllers/entity/entity.http +62 -0
- package/controllers/entity/get-entity.controller.ts +33 -0
- package/controllers/entity/list-entities.controller.ts +69 -0
- package/controllers/entity/update-entity.controller.ts +56 -0
- package/controllers/entity/upsert-entity.controller.ts +97 -0
- package/controllers/mutual/create-mutual.controller.ts +89 -0
- package/controllers/mutual/delete-mutual.controller.ts +40 -0
- package/controllers/mutual/get-mutual.controller.ts +38 -0
- package/controllers/mutual/list-entities-by-entity.controller.ts +76 -0
- package/controllers/mutual/mutual.http +88 -0
- package/controllers/mutual/update-mutual.controller.ts +50 -0
- package/controllers/setupRoutes.ts +73 -0
- package/controllers/tag/list-tags.controller.ts +57 -0
- package/data/DbUtils.ts +40 -0
- package/data/Entity.ts +499 -0
- package/data/EventUtils.ts +47 -0
- package/data/FileObject.ts +16 -0
- package/data/Mutual.ts +779 -0
- package/data/ProjectionExpression.ts +8 -0
- package/data/Tag.ts +470 -0
- package/data/abstract/Item.base.ts +19 -0
- package/data/abstract/Repository.base.ts +92 -0
- package/dist/configs/service.config.d.ts +5 -0
- package/dist/configs/service.config.d.ts.map +1 -0
- package/dist/configs/service.config.js +5 -0
- package/dist/configs/service.config.js.map +1 -0
- package/dist/constants/table.d.ts +4 -0
- package/dist/constants/table.d.ts.map +1 -0
- package/dist/constants/table.js +4 -0
- package/dist/constants/table.js.map +1 -0
- package/dist/controllers/entity/create-entity.controller.d.ts +8 -0
- package/dist/controllers/entity/create-entity.controller.d.ts.map +1 -0
- package/dist/controllers/entity/create-entity.controller.js +44 -0
- package/dist/controllers/entity/create-entity.controller.js.map +1 -0
- package/dist/controllers/entity/delete-entity.controller.d.ts +8 -0
- package/dist/controllers/entity/delete-entity.controller.d.ts.map +1 -0
- package/dist/controllers/entity/delete-entity.controller.js +29 -0
- package/dist/controllers/entity/delete-entity.controller.js.map +1 -0
- package/dist/controllers/entity/get-entity.controller.d.ts +8 -0
- package/dist/controllers/entity/get-entity.controller.d.ts.map +1 -0
- package/dist/controllers/entity/get-entity.controller.js +24 -0
- package/dist/controllers/entity/get-entity.controller.js.map +1 -0
- package/dist/controllers/entity/list-entities.controller.d.ts +8 -0
- package/dist/controllers/entity/list-entities.controller.d.ts.map +1 -0
- package/dist/controllers/entity/list-entities.controller.js +56 -0
- package/dist/controllers/entity/list-entities.controller.js.map +1 -0
- package/dist/controllers/entity/update-entity.controller.d.ts +8 -0
- package/dist/controllers/entity/update-entity.controller.d.ts.map +1 -0
- package/dist/controllers/entity/update-entity.controller.js +45 -0
- package/dist/controllers/entity/update-entity.controller.js.map +1 -0
- package/dist/controllers/entity/upsert-entity.controller.d.ts +10 -0
- package/dist/controllers/entity/upsert-entity.controller.d.ts.map +1 -0
- package/dist/controllers/entity/upsert-entity.controller.js +73 -0
- package/dist/controllers/entity/upsert-entity.controller.js.map +1 -0
- package/dist/controllers/mutual/create-mutual.controller.d.ts +10 -0
- package/dist/controllers/mutual/create-mutual.controller.d.ts.map +1 -0
- package/dist/controllers/mutual/create-mutual.controller.js +70 -0
- package/dist/controllers/mutual/create-mutual.controller.js.map +1 -0
- package/dist/controllers/mutual/delete-mutual.controller.d.ts +8 -0
- package/dist/controllers/mutual/delete-mutual.controller.d.ts.map +1 -0
- package/dist/controllers/mutual/delete-mutual.controller.js +31 -0
- package/dist/controllers/mutual/delete-mutual.controller.js.map +1 -0
- package/dist/controllers/mutual/get-mutual.controller.d.ts +8 -0
- package/dist/controllers/mutual/get-mutual.controller.d.ts.map +1 -0
- package/dist/controllers/mutual/get-mutual.controller.js +24 -0
- package/dist/controllers/mutual/get-mutual.controller.js.map +1 -0
- package/dist/controllers/mutual/list-entities-by-entity.controller.d.ts +8 -0
- package/dist/controllers/mutual/list-entities-by-entity.controller.d.ts.map +1 -0
- package/dist/controllers/mutual/list-entities-by-entity.controller.js +56 -0
- package/dist/controllers/mutual/list-entities-by-entity.controller.js.map +1 -0
- package/dist/controllers/mutual/update-mutual.controller.d.ts +8 -0
- package/dist/controllers/mutual/update-mutual.controller.d.ts.map +1 -0
- package/dist/controllers/mutual/update-mutual.controller.js +40 -0
- package/dist/controllers/mutual/update-mutual.controller.js.map +1 -0
- package/dist/controllers/setupRoutes.d.ts +4 -0
- package/dist/controllers/setupRoutes.d.ts.map +1 -0
- package/dist/controllers/setupRoutes.js +31 -0
- package/dist/controllers/setupRoutes.js.map +1 -0
- package/dist/controllers/tag/list-tags.controller.d.ts +8 -0
- package/dist/controllers/tag/list-tags.controller.d.ts.map +1 -0
- package/dist/controllers/tag/list-tags.controller.js +48 -0
- package/dist/controllers/tag/list-tags.controller.js.map +1 -0
- package/dist/data/DbUtils.d.ts +7 -0
- package/dist/data/DbUtils.d.ts.map +1 -0
- package/dist/data/DbUtils.js +23 -0
- package/dist/data/DbUtils.js.map +1 -0
- package/dist/data/Entity.d.ts +71 -0
- package/dist/data/Entity.d.ts.map +1 -0
- package/dist/data/Entity.js +358 -0
- package/dist/data/Entity.js.map +1 -0
- package/dist/data/EventUtils.d.ts +14 -0
- package/dist/data/EventUtils.d.ts.map +1 -0
- package/dist/data/EventUtils.js +34 -0
- package/dist/data/EventUtils.js.map +1 -0
- package/dist/data/FileObject.d.ts +62 -0
- package/dist/data/FileObject.d.ts.map +1 -0
- package/dist/data/FileObject.js +13 -0
- package/dist/data/FileObject.js.map +1 -0
- package/dist/data/Mutual.d.ts +94 -0
- package/dist/data/Mutual.d.ts.map +1 -0
- package/dist/data/Mutual.js +492 -0
- package/dist/data/Mutual.js.map +1 -0
- package/dist/data/ProjectionExpression.d.ts +6 -0
- package/dist/data/ProjectionExpression.d.ts.map +1 -0
- package/dist/data/ProjectionExpression.js +5 -0
- package/dist/data/ProjectionExpression.js.map +1 -0
- package/dist/data/Tag.d.ts +77 -0
- package/dist/data/Tag.d.ts.map +1 -0
- package/dist/data/Tag.js +330 -0
- package/dist/data/Tag.js.map +1 -0
- package/dist/data/abstract/Item.base.d.ts +11 -0
- package/dist/data/abstract/Item.base.d.ts.map +1 -0
- package/dist/data/abstract/Item.base.js +9 -0
- package/dist/data/abstract/Item.base.js.map +1 -0
- package/dist/data/abstract/Repository.base.d.ts +11 -0
- package/dist/data/abstract/Repository.base.d.ts.map +1 -0
- package/dist/data/abstract/Repository.base.js +54 -0
- package/dist/data/abstract/Repository.base.js.map +1 -0
- package/dist/errors/api-error.d.ts +23 -0
- package/dist/errors/api-error.d.ts.map +1 -0
- package/dist/errors/api-error.js +26 -0
- package/dist/errors/api-error.js.map +1 -0
- package/dist/errors/extendable-error.d.ts +18 -0
- package/dist/errors/extendable-error.d.ts.map +1 -0
- package/dist/errors/extendable-error.js +22 -0
- package/dist/errors/extendable-error.js.map +1 -0
- package/dist/errors/standard-error.d.ts +11 -0
- package/dist/errors/standard-error.d.ts.map +1 -0
- package/dist/errors/standard-error.js +21 -0
- package/dist/errors/standard-error.js.map +1 -0
- package/dist/helpers/dependencies.d.ts +8 -0
- package/dist/helpers/dependencies.d.ts.map +1 -0
- package/dist/helpers/dependencies.js +10 -0
- package/dist/helpers/dependencies.js.map +1 -0
- package/dist/helpers/event.d.ts +22 -0
- package/dist/helpers/event.d.ts.map +1 -0
- package/dist/helpers/event.js +47 -0
- package/dist/helpers/event.js.map +1 -0
- package/dist/helpers/fromLastKeyQuery.d.ts +3 -0
- package/dist/helpers/fromLastKeyQuery.d.ts.map +1 -0
- package/dist/helpers/fromLastKeyQuery.js +7 -0
- package/dist/helpers/fromLastKeyQuery.js.map +1 -0
- package/dist/helpers/sleep.d.ts +2 -0
- package/dist/helpers/sleep.d.ts.map +1 -0
- package/dist/helpers/sleep.js +2 -0
- package/dist/helpers/sleep.js.map +1 -0
- package/dist/helpers/toLastKeyResponse.d.ts +3 -0
- package/dist/helpers/toLastKeyResponse.d.ts.map +1 -0
- package/dist/helpers/toLastKeyResponse.js +7 -0
- package/dist/helpers/toLastKeyResponse.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewares/entity-type-check.d.ts +3 -0
- package/dist/middlewares/entity-type-check.d.ts.map +1 -0
- package/dist/middlewares/entity-type-check.js +12 -0
- package/dist/middlewares/entity-type-check.js.map +1 -0
- package/dist/middlewares/mutual-type-check.d.ts +3 -0
- package/dist/middlewares/mutual-type-check.d.ts.map +1 -0
- package/dist/middlewares/mutual-type-check.js +13 -0
- package/dist/middlewares/mutual-type-check.js.map +1 -0
- package/dist/mock/container.d.ts +3 -0
- package/dist/mock/container.d.ts.map +1 -0
- package/dist/mock/container.js +3 -0
- package/dist/mock/container.js.map +1 -0
- package/dist/mock/entity.d.ts +13 -0
- package/dist/mock/entity.d.ts.map +1 -0
- package/dist/mock/entity.js +14 -0
- package/dist/mock/entity.js.map +1 -0
- package/dist/mock/monorise/admin.d.ts +127 -0
- package/dist/mock/monorise/admin.d.ts.map +1 -0
- package/dist/mock/monorise/admin.js +29 -0
- package/dist/mock/monorise/admin.js.map +1 -0
- package/dist/mock/monorise/chapter.d.ts +457 -0
- package/dist/mock/monorise/chapter.d.ts.map +1 -0
- package/dist/mock/monorise/chapter.js +81 -0
- package/dist/mock/monorise/chapter.js.map +1 -0
- package/dist/mock/monorise/course.d.ts +311 -0
- package/dist/mock/monorise/course.d.ts.map +1 -0
- package/dist/mock/monorise/course.js +128 -0
- package/dist/mock/monorise/course.js.map +1 -0
- package/dist/mock/monorise/index.d.ts +3599 -0
- package/dist/mock/monorise/index.d.ts.map +1 -0
- package/dist/mock/monorise/index.js +62 -0
- package/dist/mock/monorise/index.js.map +1 -0
- package/dist/mock/monorise/learner.d.ts +390 -0
- package/dist/mock/monorise/learner.d.ts.map +1 -0
- package/dist/mock/monorise/learner.js +59 -0
- package/dist/mock/monorise/learner.js.map +1 -0
- package/dist/mock/monorise/learning-activity.d.ts +266 -0
- package/dist/mock/monorise/learning-activity.d.ts.map +1 -0
- package/dist/mock/monorise/learning-activity.js +50 -0
- package/dist/mock/monorise/learning-activity.js.map +1 -0
- package/dist/mock/monorise/learning-journey-config.d.ts +84 -0
- package/dist/mock/monorise/learning-journey-config.d.ts.map +1 -0
- package/dist/mock/monorise/learning-journey-config.js +27 -0
- package/dist/mock/monorise/learning-journey-config.js.map +1 -0
- package/dist/mock/monorise/module.d.ts +211 -0
- package/dist/mock/monorise/module.d.ts.map +1 -0
- package/dist/mock/monorise/module.js +91 -0
- package/dist/mock/monorise/module.js.map +1 -0
- package/dist/mock/monorise/organization.d.ts +346 -0
- package/dist/mock/monorise/organization.d.ts.map +1 -0
- package/dist/mock/monorise/organization.js +54 -0
- package/dist/mock/monorise/organization.js.map +1 -0
- package/dist/mock/monorise/reference.d.ts +171 -0
- package/dist/mock/monorise/reference.d.ts.map +1 -0
- package/dist/mock/monorise/reference.js +25 -0
- package/dist/mock/monorise/reference.js.map +1 -0
- package/dist/mock/monorise/video.d.ts +346 -0
- package/dist/mock/monorise/video.d.ts.map +1 -0
- package/dist/mock/monorise/video.js +33 -0
- package/dist/mock/monorise/video.js.map +1 -0
- package/dist/packages/core/configs/service.config.d.ts +5 -0
- package/dist/packages/core/configs/service.config.d.ts.map +1 -0
- package/dist/packages/core/configs/service.config.js +5 -0
- package/dist/packages/core/configs/service.config.js.map +1 -0
- package/dist/packages/core/constants/table.d.ts +4 -0
- package/dist/packages/core/constants/table.d.ts.map +1 -0
- package/dist/packages/core/constants/table.js +4 -0
- package/dist/packages/core/constants/table.js.map +1 -0
- package/dist/packages/core/controllers/entity/create-entity.controller.d.ts +8 -0
- package/dist/packages/core/controllers/entity/create-entity.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/entity/create-entity.controller.js +44 -0
- package/dist/packages/core/controllers/entity/create-entity.controller.js.map +1 -0
- package/dist/packages/core/controllers/entity/delete-entity.controller.d.ts +8 -0
- package/dist/packages/core/controllers/entity/delete-entity.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/entity/delete-entity.controller.js +29 -0
- package/dist/packages/core/controllers/entity/delete-entity.controller.js.map +1 -0
- package/dist/packages/core/controllers/entity/get-entity.controller.d.ts +8 -0
- package/dist/packages/core/controllers/entity/get-entity.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/entity/get-entity.controller.js +24 -0
- package/dist/packages/core/controllers/entity/get-entity.controller.js.map +1 -0
- package/dist/packages/core/controllers/entity/list-entities.controller.d.ts +8 -0
- package/dist/packages/core/controllers/entity/list-entities.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/entity/list-entities.controller.js +56 -0
- package/dist/packages/core/controllers/entity/list-entities.controller.js.map +1 -0
- package/dist/packages/core/controllers/entity/update-entity.controller.d.ts +8 -0
- package/dist/packages/core/controllers/entity/update-entity.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/entity/update-entity.controller.js +45 -0
- package/dist/packages/core/controllers/entity/update-entity.controller.js.map +1 -0
- package/dist/packages/core/controllers/entity/upsert-entity.controller.d.ts +10 -0
- package/dist/packages/core/controllers/entity/upsert-entity.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/entity/upsert-entity.controller.js +73 -0
- package/dist/packages/core/controllers/entity/upsert-entity.controller.js.map +1 -0
- package/dist/packages/core/controllers/mutual/create-mutual.controller.d.ts +10 -0
- package/dist/packages/core/controllers/mutual/create-mutual.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/mutual/create-mutual.controller.js +70 -0
- package/dist/packages/core/controllers/mutual/create-mutual.controller.js.map +1 -0
- package/dist/packages/core/controllers/mutual/delete-mutual.controller.d.ts +8 -0
- package/dist/packages/core/controllers/mutual/delete-mutual.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/mutual/delete-mutual.controller.js +31 -0
- package/dist/packages/core/controllers/mutual/delete-mutual.controller.js.map +1 -0
- package/dist/packages/core/controllers/mutual/get-mutual.controller.d.ts +8 -0
- package/dist/packages/core/controllers/mutual/get-mutual.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/mutual/get-mutual.controller.js +24 -0
- package/dist/packages/core/controllers/mutual/get-mutual.controller.js.map +1 -0
- package/dist/packages/core/controllers/mutual/list-entities-by-entity.controller.d.ts +8 -0
- package/dist/packages/core/controllers/mutual/list-entities-by-entity.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/mutual/list-entities-by-entity.controller.js +56 -0
- package/dist/packages/core/controllers/mutual/list-entities-by-entity.controller.js.map +1 -0
- package/dist/packages/core/controllers/mutual/update-mutual.controller.d.ts +8 -0
- package/dist/packages/core/controllers/mutual/update-mutual.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/mutual/update-mutual.controller.js +40 -0
- package/dist/packages/core/controllers/mutual/update-mutual.controller.js.map +1 -0
- package/dist/packages/core/controllers/setupRoutes.d.ts +3 -0
- package/dist/packages/core/controllers/setupRoutes.d.ts.map +1 -0
- package/dist/packages/core/controllers/setupRoutes.js +33 -0
- package/dist/packages/core/controllers/setupRoutes.js.map +1 -0
- package/dist/packages/core/controllers/tag/list-tags.controller.d.ts +8 -0
- package/dist/packages/core/controllers/tag/list-tags.controller.d.ts.map +1 -0
- package/dist/packages/core/controllers/tag/list-tags.controller.js +48 -0
- package/dist/packages/core/controllers/tag/list-tags.controller.js.map +1 -0
- package/dist/packages/core/data/DbUtils.d.ts +7 -0
- package/dist/packages/core/data/DbUtils.d.ts.map +1 -0
- package/dist/packages/core/data/DbUtils.js +23 -0
- package/dist/packages/core/data/DbUtils.js.map +1 -0
- package/dist/packages/core/data/Entity.d.ts +71 -0
- package/dist/packages/core/data/Entity.d.ts.map +1 -0
- package/dist/packages/core/data/Entity.js +358 -0
- package/dist/packages/core/data/Entity.js.map +1 -0
- package/dist/packages/core/data/EventUtils.d.ts +14 -0
- package/dist/packages/core/data/EventUtils.d.ts.map +1 -0
- package/dist/packages/core/data/EventUtils.js +34 -0
- package/dist/packages/core/data/EventUtils.js.map +1 -0
- package/dist/packages/core/data/FileObject.d.ts +62 -0
- package/dist/packages/core/data/FileObject.d.ts.map +1 -0
- package/dist/packages/core/data/FileObject.js +13 -0
- package/dist/packages/core/data/FileObject.js.map +1 -0
- package/dist/packages/core/data/Mutual.d.ts +94 -0
- package/dist/packages/core/data/Mutual.d.ts.map +1 -0
- package/dist/packages/core/data/Mutual.js +492 -0
- package/dist/packages/core/data/Mutual.js.map +1 -0
- package/dist/packages/core/data/ProjectionExpression.d.ts +6 -0
- package/dist/packages/core/data/ProjectionExpression.d.ts.map +1 -0
- package/dist/packages/core/data/ProjectionExpression.js +5 -0
- package/dist/packages/core/data/ProjectionExpression.js.map +1 -0
- package/dist/packages/core/data/Tag.d.ts +77 -0
- package/dist/packages/core/data/Tag.d.ts.map +1 -0
- package/dist/packages/core/data/Tag.js +330 -0
- package/dist/packages/core/data/Tag.js.map +1 -0
- package/dist/packages/core/data/abstract/Item.base.d.ts +11 -0
- package/dist/packages/core/data/abstract/Item.base.d.ts.map +1 -0
- package/dist/packages/core/data/abstract/Item.base.js +9 -0
- package/dist/packages/core/data/abstract/Item.base.js.map +1 -0
- package/dist/packages/core/data/abstract/Repository.base.d.ts +11 -0
- package/dist/packages/core/data/abstract/Repository.base.d.ts.map +1 -0
- package/dist/packages/core/data/abstract/Repository.base.js +54 -0
- package/dist/packages/core/data/abstract/Repository.base.js.map +1 -0
- package/dist/packages/core/errors/api-error.d.ts +23 -0
- package/dist/packages/core/errors/api-error.d.ts.map +1 -0
- package/dist/packages/core/errors/api-error.js +26 -0
- package/dist/packages/core/errors/api-error.js.map +1 -0
- package/dist/packages/core/errors/extendable-error.d.ts +18 -0
- package/dist/packages/core/errors/extendable-error.d.ts.map +1 -0
- package/dist/packages/core/errors/extendable-error.js +22 -0
- package/dist/packages/core/errors/extendable-error.js.map +1 -0
- package/dist/packages/core/errors/standard-error.d.ts +11 -0
- package/dist/packages/core/errors/standard-error.d.ts.map +1 -0
- package/dist/packages/core/errors/standard-error.js +21 -0
- package/dist/packages/core/errors/standard-error.js.map +1 -0
- package/dist/packages/core/helpers/dependencies.d.ts +8 -0
- package/dist/packages/core/helpers/dependencies.d.ts.map +1 -0
- package/dist/packages/core/helpers/dependencies.js +10 -0
- package/dist/packages/core/helpers/dependencies.js.map +1 -0
- package/dist/packages/core/helpers/event.d.ts +22 -0
- package/dist/packages/core/helpers/event.d.ts.map +1 -0
- package/dist/packages/core/helpers/event.js +47 -0
- package/dist/packages/core/helpers/event.js.map +1 -0
- package/dist/packages/core/helpers/fromLastKeyQuery.d.ts +3 -0
- package/dist/packages/core/helpers/fromLastKeyQuery.d.ts.map +1 -0
- package/dist/packages/core/helpers/fromLastKeyQuery.js +7 -0
- package/dist/packages/core/helpers/fromLastKeyQuery.js.map +1 -0
- package/dist/packages/core/helpers/sleep.d.ts +2 -0
- package/dist/packages/core/helpers/sleep.d.ts.map +1 -0
- package/dist/packages/core/helpers/sleep.js +2 -0
- package/dist/packages/core/helpers/sleep.js.map +1 -0
- package/dist/packages/core/helpers/toLastKeyResponse.d.ts +3 -0
- package/dist/packages/core/helpers/toLastKeyResponse.d.ts.map +1 -0
- package/dist/packages/core/helpers/toLastKeyResponse.js +7 -0
- package/dist/packages/core/helpers/toLastKeyResponse.js.map +1 -0
- package/dist/packages/core/index.d.ts +12 -0
- package/dist/packages/core/index.d.ts.map +1 -0
- package/dist/packages/core/index.js +12 -0
- package/dist/packages/core/index.js.map +1 -0
- package/dist/packages/core/middlewares/entity-type-check.d.ts +3 -0
- package/dist/packages/core/middlewares/entity-type-check.d.ts.map +1 -0
- package/dist/packages/core/middlewares/entity-type-check.js +12 -0
- package/dist/packages/core/middlewares/entity-type-check.js.map +1 -0
- package/dist/packages/core/middlewares/mutual-type-check.d.ts +3 -0
- package/dist/packages/core/middlewares/mutual-type-check.d.ts.map +1 -0
- package/dist/packages/core/middlewares/mutual-type-check.js +13 -0
- package/dist/packages/core/middlewares/mutual-type-check.js.map +1 -0
- package/dist/packages/core/mock/container.d.ts +3 -0
- package/dist/packages/core/mock/container.d.ts.map +1 -0
- package/dist/packages/core/mock/container.js +3 -0
- package/dist/packages/core/mock/container.js.map +1 -0
- package/dist/packages/core/mock/entity.d.ts +13 -0
- package/dist/packages/core/mock/entity.d.ts.map +1 -0
- package/dist/packages/core/mock/entity.js +14 -0
- package/dist/packages/core/mock/entity.js.map +1 -0
- package/dist/packages/core/mock/monorise/admin.d.ts +127 -0
- package/dist/packages/core/mock/monorise/admin.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/admin.js +29 -0
- package/dist/packages/core/mock/monorise/admin.js.map +1 -0
- package/dist/packages/core/mock/monorise/audio.d.ts +324 -0
- package/dist/packages/core/mock/monorise/audio.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/audio.js +32 -0
- package/dist/packages/core/mock/monorise/audio.js.map +1 -0
- package/dist/packages/core/mock/monorise/chapter.d.ts +457 -0
- package/dist/packages/core/mock/monorise/chapter.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/chapter.js +81 -0
- package/dist/packages/core/mock/monorise/chapter.js.map +1 -0
- package/dist/packages/core/mock/monorise/cohort-track.d.ts +118 -0
- package/dist/packages/core/mock/monorise/cohort-track.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/cohort-track.js +38 -0
- package/dist/packages/core/mock/monorise/cohort-track.js.map +1 -0
- package/dist/packages/core/mock/monorise/course-banner.d.ts +149 -0
- package/dist/packages/core/mock/monorise/course-banner.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/course-banner.js +24 -0
- package/dist/packages/core/mock/monorise/course-banner.js.map +1 -0
- package/dist/packages/core/mock/monorise/course.d.ts +311 -0
- package/dist/packages/core/mock/monorise/course.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/course.js +128 -0
- package/dist/packages/core/mock/monorise/course.js.map +1 -0
- package/dist/packages/core/mock/monorise/expert.d.ts +380 -0
- package/dist/packages/core/mock/monorise/expert.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/expert.js +32 -0
- package/dist/packages/core/mock/monorise/expert.js.map +1 -0
- package/dist/packages/core/mock/monorise/index.d.ts +3599 -0
- package/dist/packages/core/mock/monorise/index.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/index.js +62 -0
- package/dist/packages/core/mock/monorise/index.js.map +1 -0
- package/dist/packages/core/mock/monorise/learner-video-progress.d.ts +198 -0
- package/dist/packages/core/mock/monorise/learner-video-progress.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/learner-video-progress.js +21 -0
- package/dist/packages/core/mock/monorise/learner-video-progress.js.map +1 -0
- package/dist/packages/core/mock/monorise/learner.d.ts +390 -0
- package/dist/packages/core/mock/monorise/learner.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/learner.js +59 -0
- package/dist/packages/core/mock/monorise/learner.js.map +1 -0
- package/dist/packages/core/mock/monorise/learning-activity-submission.d.ts +160 -0
- package/dist/packages/core/mock/monorise/learning-activity-submission.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/learning-activity-submission.js +17 -0
- package/dist/packages/core/mock/monorise/learning-activity-submission.js.map +1 -0
- package/dist/packages/core/mock/monorise/learning-activity.d.ts +266 -0
- package/dist/packages/core/mock/monorise/learning-activity.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/learning-activity.js +50 -0
- package/dist/packages/core/mock/monorise/learning-activity.js.map +1 -0
- package/dist/packages/core/mock/monorise/learning-journey-config.d.ts +84 -0
- package/dist/packages/core/mock/monorise/learning-journey-config.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/learning-journey-config.js +27 -0
- package/dist/packages/core/mock/monorise/learning-journey-config.js.map +1 -0
- package/dist/packages/core/mock/monorise/learning-journey-progress.d.ts +290 -0
- package/dist/packages/core/mock/monorise/learning-journey-progress.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/learning-journey-progress.js +46 -0
- package/dist/packages/core/mock/monorise/learning-journey-progress.js.map +1 -0
- package/dist/packages/core/mock/monorise/module.d.ts +211 -0
- package/dist/packages/core/mock/monorise/module.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/module.js +91 -0
- package/dist/packages/core/mock/monorise/module.js.map +1 -0
- package/dist/packages/core/mock/monorise/organization.d.ts +346 -0
- package/dist/packages/core/mock/monorise/organization.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/organization.js +54 -0
- package/dist/packages/core/mock/monorise/organization.js.map +1 -0
- package/dist/packages/core/mock/monorise/pathway.d.ts +267 -0
- package/dist/packages/core/mock/monorise/pathway.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/pathway.js +221 -0
- package/dist/packages/core/mock/monorise/pathway.js.map +1 -0
- package/dist/packages/core/mock/monorise/phase.d.ts +580 -0
- package/dist/packages/core/mock/monorise/phase.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/phase.js +166 -0
- package/dist/packages/core/mock/monorise/phase.js.map +1 -0
- package/dist/packages/core/mock/monorise/reference.d.ts +171 -0
- package/dist/packages/core/mock/monorise/reference.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/reference.js +25 -0
- package/dist/packages/core/mock/monorise/reference.js.map +1 -0
- package/dist/packages/core/mock/monorise/track.d.ts +617 -0
- package/dist/packages/core/mock/monorise/track.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/track.js +270 -0
- package/dist/packages/core/mock/monorise/track.js.map +1 -0
- package/dist/packages/core/mock/monorise/video.d.ts +346 -0
- package/dist/packages/core/mock/monorise/video.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise/video.js +33 -0
- package/dist/packages/core/mock/monorise/video.js.map +1 -0
- package/dist/packages/core/mock/monorise.d.ts +6 -0
- package/dist/packages/core/mock/monorise.d.ts.map +1 -0
- package/dist/packages/core/mock/monorise.js +5 -0
- package/dist/packages/core/mock/monorise.js.map +1 -0
- package/dist/packages/core/processors/create-entity-processor.d.ts +5 -0
- package/dist/packages/core/processors/create-entity-processor.d.ts.map +1 -0
- package/dist/packages/core/processors/create-entity-processor.js +32 -0
- package/dist/packages/core/processors/create-entity-processor.js.map +1 -0
- package/dist/packages/core/processors/mutual-processor.d.ts +15 -0
- package/dist/packages/core/processors/mutual-processor.d.ts.map +1 -0
- package/dist/packages/core/processors/mutual-processor.js +128 -0
- package/dist/packages/core/processors/mutual-processor.js.map +1 -0
- package/dist/packages/core/processors/prejoin-processor.d.ts +12 -0
- package/dist/packages/core/processors/prejoin-processor.d.ts.map +1 -0
- package/dist/packages/core/processors/prejoin-processor.js +150 -0
- package/dist/packages/core/processors/prejoin-processor.js.map +1 -0
- package/dist/packages/core/processors/replication-processor.d.ts +8 -0
- package/dist/packages/core/processors/replication-processor.d.ts.map +1 -0
- package/dist/packages/core/processors/replication-processor.js +180 -0
- package/dist/packages/core/processors/replication-processor.js.map +1 -0
- package/dist/packages/core/processors/tag-processor.d.ts +11 -0
- package/dist/packages/core/processors/tag-processor.d.ts.map +1 -0
- package/dist/packages/core/processors/tag-processor.js +106 -0
- package/dist/packages/core/processors/tag-processor.js.map +1 -0
- package/dist/packages/core/services/DependencyContainer.d.ts +51 -0
- package/dist/packages/core/services/DependencyContainer.d.ts.map +1 -0
- package/dist/packages/core/services/DependencyContainer.js +115 -0
- package/dist/packages/core/services/DependencyContainer.js.map +1 -0
- package/dist/packages/core/services/entity-service-lifecycle.d.ts +12 -0
- package/dist/packages/core/services/entity-service-lifecycle.d.ts.map +1 -0
- package/dist/packages/core/services/entity-service-lifecycle.js +23 -0
- package/dist/packages/core/services/entity-service-lifecycle.js.map +1 -0
- package/dist/packages/core/services/entity.service.d.ts +32 -0
- package/dist/packages/core/services/entity.service.d.ts.map +1 -0
- package/dist/packages/core/services/entity.service.js +121 -0
- package/dist/packages/core/services/entity.service.js.map +1 -0
- package/dist/packages/core/services/mutual.service.d.ts +64 -0
- package/dist/packages/core/services/mutual.service.d.ts.map +1 -0
- package/dist/packages/core/services/mutual.service.js +144 -0
- package/dist/packages/core/services/mutual.service.js.map +1 -0
- package/dist/packages/core/types/entity.type.d.ts +20 -0
- package/dist/packages/core/types/entity.type.d.ts.map +1 -0
- package/dist/packages/core/types/entity.type.js +2 -0
- package/dist/packages/core/types/entity.type.js.map +1 -0
- package/dist/processors/create-entity-processor.d.ts +5 -0
- package/dist/processors/create-entity-processor.d.ts.map +1 -0
- package/dist/processors/create-entity-processor.js +33 -0
- package/dist/processors/create-entity-processor.js.map +1 -0
- package/dist/processors/mutual-processor.d.ts +15 -0
- package/dist/processors/mutual-processor.d.ts.map +1 -0
- package/dist/processors/mutual-processor.js +129 -0
- package/dist/processors/mutual-processor.js.map +1 -0
- package/dist/processors/prejoin-processor.d.ts +12 -0
- package/dist/processors/prejoin-processor.d.ts.map +1 -0
- package/dist/processors/prejoin-processor.js +151 -0
- package/dist/processors/prejoin-processor.js.map +1 -0
- package/dist/processors/replication-processor.d.ts +8 -0
- package/dist/processors/replication-processor.d.ts.map +1 -0
- package/dist/processors/replication-processor.js +181 -0
- package/dist/processors/replication-processor.js.map +1 -0
- package/dist/processors/tag-processor.d.ts +11 -0
- package/dist/processors/tag-processor.d.ts.map +1 -0
- package/dist/processors/tag-processor.js +107 -0
- package/dist/processors/tag-processor.js.map +1 -0
- package/dist/services/DependencyContainer.d.ts +51 -0
- package/dist/services/DependencyContainer.d.ts.map +1 -0
- package/dist/services/DependencyContainer.js +115 -0
- package/dist/services/DependencyContainer.js.map +1 -0
- package/dist/services/entity-service-lifecycle.d.ts +12 -0
- package/dist/services/entity-service-lifecycle.d.ts.map +1 -0
- package/dist/services/entity-service-lifecycle.js +23 -0
- package/dist/services/entity-service-lifecycle.js.map +1 -0
- package/dist/services/entity.service.d.ts +32 -0
- package/dist/services/entity.service.d.ts.map +1 -0
- package/dist/services/entity.service.js +121 -0
- package/dist/services/entity.service.js.map +1 -0
- package/dist/services/mutual.service.d.ts +64 -0
- package/dist/services/mutual.service.d.ts.map +1 -0
- package/dist/services/mutual.service.js +144 -0
- package/dist/services/mutual.service.js.map +1 -0
- package/dist/shared/types/event.d.ts +72 -0
- package/dist/shared/types/event.d.ts.map +1 -0
- package/dist/shared/types/event.js +74 -0
- package/dist/shared/types/event.js.map +1 -0
- package/dist/types/entity.type.d.ts +20 -0
- package/dist/types/entity.type.d.ts.map +1 -0
- package/dist/types/entity.type.js +2 -0
- package/dist/types/entity.type.js.map +1 -0
- package/dist/types/event.d.ts +72 -0
- package/dist/types/event.d.ts.map +1 -0
- package/dist/types/event.js +74 -0
- package/dist/types/event.js.map +1 -0
- package/errors/api-error.ts +39 -0
- package/errors/extendable-error.ts +35 -0
- package/errors/standard-error.ts +29 -0
- package/helpers/dependencies.ts +10 -0
- package/helpers/event.ts +85 -0
- package/helpers/fromLastKeyQuery.ts +11 -0
- package/helpers/sleep.ts +1 -0
- package/helpers/toLastKeyResponse.ts +11 -0
- package/index.ts +23 -0
- package/middlewares/entity-type-check.ts +20 -0
- package/middlewares/mutual-type-check.ts +26 -0
- package/mock/entity.ts +12 -0
- package/mock/monorise/admin.ts +35 -0
- package/mock/monorise/chapter.ts +94 -0
- package/mock/monorise/course.ts +149 -0
- package/mock/monorise/index.ts +143 -0
- package/mock/monorise/learner.ts +66 -0
- package/mock/monorise/learning-activity.ts +62 -0
- package/mock/monorise/learning-journey-config.ts +34 -0
- package/mock/monorise/module.ts +108 -0
- package/mock/monorise/organization.ts +63 -0
- package/mock/monorise/reference.ts +28 -0
- package/mock/monorise/video.ts +36 -0
- package/package.json +31 -0
- package/processors/create-entity-processor.ts +55 -0
- package/processors/mutual-processor.ts +262 -0
- package/processors/prejoin-processor.ts +264 -0
- package/processors/replication-processor.ts +261 -0
- package/processors/tag-processor.ts +174 -0
- package/services/DependencyContainer.ts +208 -0
- package/services/entity-service-lifecycle.ts +41 -0
- package/services/entity.service.ts +201 -0
- package/services/mutual.service.ts +285 -0
- package/tsconfig.json +118 -0
- package/types/entity.type.ts +62 -0
- package/types/event.ts +84 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { ConditionalCheckFailedException } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import type {
|
|
3
|
+
AttributeValue,
|
|
4
|
+
_Record as DynamoDBStreamEvent,
|
|
5
|
+
} from '@aws-sdk/client-dynamodb-streams';
|
|
6
|
+
import type { DynamoDBBatchItemFailure } from 'aws-lambda';
|
|
7
|
+
import {
|
|
8
|
+
ENTITY_REPLICATION_INDEX,
|
|
9
|
+
MUTUAL_REPLICATION_INDEX,
|
|
10
|
+
} from '#/configs/service.config';
|
|
11
|
+
import { StandardError } from '#/errors/standard-error';
|
|
12
|
+
import { DependencyContainer } from '#/services/DependencyContainer';
|
|
13
|
+
|
|
14
|
+
const container = new DependencyContainer();
|
|
15
|
+
const TableName = process.env.DDB_TABLE;
|
|
16
|
+
|
|
17
|
+
export const handler = async (event: { Records: DynamoDBStreamEvent[] }) => {
|
|
18
|
+
const batchItemFailures: DynamoDBBatchItemFailure[] = [];
|
|
19
|
+
const { dynamodbClient } = container;
|
|
20
|
+
|
|
21
|
+
for (const record of event.Records) {
|
|
22
|
+
const errorContext: any = {};
|
|
23
|
+
errorContext.record = record;
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
if (record.eventName === 'MODIFY') {
|
|
27
|
+
const modifiedItem = record.dynamodb?.NewImage;
|
|
28
|
+
if (!modifiedItem) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const isMetadata = modifiedItem.SK.S?.startsWith('#METADATA#');
|
|
33
|
+
const isMutual = modifiedItem.PK.S?.startsWith('MUTUAL#') && isMetadata;
|
|
34
|
+
const isEntity = isMetadata && !isMutual;
|
|
35
|
+
|
|
36
|
+
if (!isEntity && !isMutual) {
|
|
37
|
+
// skip replicated data
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// default variables
|
|
42
|
+
let targetRPK = 'R1PK';
|
|
43
|
+
const targetData = 'data';
|
|
44
|
+
let targetIndexName = ENTITY_REPLICATION_INDEX;
|
|
45
|
+
const targetUpdatedAt = 'updatedAt';
|
|
46
|
+
|
|
47
|
+
let queryExpression: {
|
|
48
|
+
FilterExpression?: string;
|
|
49
|
+
ExpressionAttributeNames: Record<string, string>;
|
|
50
|
+
ExpressionAttributeValues: Record<string, AttributeValue>;
|
|
51
|
+
} = {
|
|
52
|
+
FilterExpression: `#${targetUpdatedAt} < :${targetUpdatedAt}`,
|
|
53
|
+
ExpressionAttributeNames: {
|
|
54
|
+
[`#${targetRPK}`]: targetRPK,
|
|
55
|
+
[`#${targetUpdatedAt}`]: targetUpdatedAt,
|
|
56
|
+
},
|
|
57
|
+
ExpressionAttributeValues: {
|
|
58
|
+
[`:${targetRPK}`]: modifiedItem.PK,
|
|
59
|
+
[`:${targetUpdatedAt}`]: modifiedItem.updatedAt,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const updateExpession: {
|
|
64
|
+
ConditionExpression: string;
|
|
65
|
+
UpdateExpression: string;
|
|
66
|
+
ExpressionAttributeNames: Record<string, string>;
|
|
67
|
+
ExpressionAttributeValues: Record<string, AttributeValue>;
|
|
68
|
+
} = {
|
|
69
|
+
UpdateExpression: `SET #${targetUpdatedAt} = :${targetUpdatedAt}, #${targetData} = :${targetData}`,
|
|
70
|
+
ConditionExpression: `#${targetUpdatedAt} < :${targetUpdatedAt}`,
|
|
71
|
+
ExpressionAttributeNames: {
|
|
72
|
+
[`#${targetData}`]: targetData,
|
|
73
|
+
[`#${targetUpdatedAt}`]: targetUpdatedAt,
|
|
74
|
+
},
|
|
75
|
+
ExpressionAttributeValues: {
|
|
76
|
+
[`:${targetData}`]: modifiedItem.data,
|
|
77
|
+
[`:${targetUpdatedAt}`]: modifiedItem.updatedAt,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
if (isMutual) {
|
|
82
|
+
targetRPK = 'R2PK';
|
|
83
|
+
targetIndexName = MUTUAL_REPLICATION_INDEX;
|
|
84
|
+
|
|
85
|
+
// condition to only replicate to mutualAsEntity
|
|
86
|
+
queryExpression = {
|
|
87
|
+
FilterExpression: `${queryExpression.FilterExpression} AND #SK = :metadata`, // to replicate to mutualAsEntity only
|
|
88
|
+
ExpressionAttributeNames: {
|
|
89
|
+
'#SK': 'SK',
|
|
90
|
+
[`#${targetRPK}`]: targetRPK,
|
|
91
|
+
[`#${targetUpdatedAt}`]: targetUpdatedAt,
|
|
92
|
+
},
|
|
93
|
+
ExpressionAttributeValues: {
|
|
94
|
+
':metadata': { S: '#METADATA#' },
|
|
95
|
+
[`:${targetRPK}`]: modifiedItem.PK,
|
|
96
|
+
[`:${targetUpdatedAt}`]: modifiedItem.mutualUpdatedAt,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
updateExpession.ExpressionAttributeValues = {
|
|
101
|
+
[`:${targetData}`]: modifiedItem.mutualData,
|
|
102
|
+
[`:${targetUpdatedAt}`]: modifiedItem.mutualUpdatedAt,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
errorContext.queryExpression = queryExpression;
|
|
107
|
+
errorContext.updateExpession = updateExpession;
|
|
108
|
+
|
|
109
|
+
// retrieve all to be replicated items
|
|
110
|
+
let toBeReplicatedItems: Record<string, AttributeValue>[] = [];
|
|
111
|
+
let lastKey;
|
|
112
|
+
|
|
113
|
+
do {
|
|
114
|
+
const queryResult = await dynamodbClient.query({
|
|
115
|
+
TableName,
|
|
116
|
+
IndexName: targetIndexName,
|
|
117
|
+
KeyConditionExpression: `#${targetRPK} = :${targetRPK}`,
|
|
118
|
+
...queryExpression,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
toBeReplicatedItems = [
|
|
122
|
+
...toBeReplicatedItems,
|
|
123
|
+
...(queryResult.Items || []),
|
|
124
|
+
];
|
|
125
|
+
lastKey = queryResult.LastEvaluatedKey;
|
|
126
|
+
} while (lastKey);
|
|
127
|
+
errorContext.toBeReplicatedItems = toBeReplicatedItems;
|
|
128
|
+
|
|
129
|
+
const updatePromises = toBeReplicatedItems.map((item) => {
|
|
130
|
+
const updateParams = {
|
|
131
|
+
TableName,
|
|
132
|
+
Key: {
|
|
133
|
+
PK: item.PK,
|
|
134
|
+
SK: item.SK,
|
|
135
|
+
},
|
|
136
|
+
...updateExpession,
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
return dynamodbClient.updateItem(updateParams);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
const results = await Promise.allSettled(updatePromises);
|
|
143
|
+
errorContext.results = results;
|
|
144
|
+
|
|
145
|
+
if (
|
|
146
|
+
results.some(
|
|
147
|
+
(result) =>
|
|
148
|
+
result.status === 'rejected' &&
|
|
149
|
+
!(result.reason instanceof ConditionalCheckFailedException),
|
|
150
|
+
)
|
|
151
|
+
) {
|
|
152
|
+
throw new StandardError(
|
|
153
|
+
'REPLICATION_ERROR',
|
|
154
|
+
'Replication error',
|
|
155
|
+
null,
|
|
156
|
+
errorContext,
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (record.eventName === 'REMOVE') {
|
|
162
|
+
const removedKeys = record.dynamodb?.Keys || {};
|
|
163
|
+
const isMetadata = removedKeys.SK.S?.startsWith('#METADATA#');
|
|
164
|
+
const isMutual = removedKeys.PK.S?.startsWith('MUTUAL#') && isMetadata;
|
|
165
|
+
const isEntity = isMetadata && !isMutual;
|
|
166
|
+
|
|
167
|
+
if (!isEntity && !isMutual) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// default query settings
|
|
172
|
+
let targetRPK = 'R1PK';
|
|
173
|
+
let targetIndexName: string = ENTITY_REPLICATION_INDEX;
|
|
174
|
+
|
|
175
|
+
if (isMutual) {
|
|
176
|
+
targetRPK = 'R2PK';
|
|
177
|
+
targetIndexName = MUTUAL_REPLICATION_INDEX;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
let itemsToDelete: Record<string, AttributeValue>[] = [];
|
|
181
|
+
let lastKey;
|
|
182
|
+
|
|
183
|
+
do {
|
|
184
|
+
const queryResult = await dynamodbClient.query({
|
|
185
|
+
TableName,
|
|
186
|
+
IndexName: targetIndexName,
|
|
187
|
+
KeyConditionExpression: `#${targetRPK} = :${targetRPK}`,
|
|
188
|
+
ExpressionAttributeNames: {
|
|
189
|
+
[`#${targetRPK}`]: targetRPK,
|
|
190
|
+
},
|
|
191
|
+
ExpressionAttributeValues: {
|
|
192
|
+
[`:${targetRPK}`]: removedKeys.PK,
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
itemsToDelete = [...itemsToDelete, ...(queryResult.Items || [])];
|
|
197
|
+
lastKey = queryResult.LastEvaluatedKey;
|
|
198
|
+
} while (lastKey);
|
|
199
|
+
|
|
200
|
+
const mutualsToDelete = Array.from(
|
|
201
|
+
new Set(
|
|
202
|
+
itemsToDelete
|
|
203
|
+
.filter((item) => item.R2PK?.S?.startsWith('MUTUAL#'))
|
|
204
|
+
.map((filteredItem) => filteredItem.R2PK?.S),
|
|
205
|
+
),
|
|
206
|
+
);
|
|
207
|
+
mutualsToDelete.forEach((mutual) => {
|
|
208
|
+
if (!mutual) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
itemsToDelete.push({ PK: { S: mutual }, SK: { S: '#METADATA#' } });
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
const deleteResults = await Promise.allSettled(
|
|
216
|
+
itemsToDelete.map((item) =>
|
|
217
|
+
dynamodbClient.deleteItem({
|
|
218
|
+
TableName,
|
|
219
|
+
Key: {
|
|
220
|
+
PK: item.PK,
|
|
221
|
+
SK: item.SK,
|
|
222
|
+
},
|
|
223
|
+
}),
|
|
224
|
+
),
|
|
225
|
+
);
|
|
226
|
+
errorContext.deleteResults = deleteResults;
|
|
227
|
+
|
|
228
|
+
if (
|
|
229
|
+
deleteResults.some(
|
|
230
|
+
(result) =>
|
|
231
|
+
result.status === 'rejected' &&
|
|
232
|
+
!(result.reason instanceof ConditionalCheckFailedException),
|
|
233
|
+
)
|
|
234
|
+
) {
|
|
235
|
+
throw new StandardError(
|
|
236
|
+
'REPLICATION_ERROR',
|
|
237
|
+
'Replication error',
|
|
238
|
+
null,
|
|
239
|
+
errorContext,
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
} catch (error) {
|
|
244
|
+
console.error('====REPLICATION_ERROR', error);
|
|
245
|
+
console.log(
|
|
246
|
+
'====REPLICATION_ERROR errorContext',
|
|
247
|
+
JSON.stringify(errorContext, null, 2),
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
batchItemFailures.push({
|
|
251
|
+
itemIdentifier: record.dynamodb?.SequenceNumber || '',
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
// immediately return to prevent processing the rest
|
|
255
|
+
// because stream will restart from this point again
|
|
256
|
+
return { batchItemFailures };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return { batchItemFailures };
|
|
261
|
+
};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { CreatedEntity, Entity as EntityType } from '@monorise/base';
|
|
2
|
+
import type { SQSBatchItemFailure, SQSEvent } from 'aws-lambda';
|
|
3
|
+
import type { Entity } from '#/data/Entity';
|
|
4
|
+
import { parseSQSBusEvent } from '#/helpers/event';
|
|
5
|
+
import { EntityConfig } from '#/lambda-layer/monorise';
|
|
6
|
+
import { DependencyContainer } from '#/services/DependencyContainer';
|
|
7
|
+
import type { Tag } from '#/types/entity.type';
|
|
8
|
+
|
|
9
|
+
export type EventDetailBody = {
|
|
10
|
+
entityType: EntityType;
|
|
11
|
+
entityId: string;
|
|
12
|
+
data: Record<string, any>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const container = new DependencyContainer();
|
|
16
|
+
|
|
17
|
+
function compareTags(
|
|
18
|
+
existingTags: Tag[],
|
|
19
|
+
newTags: Tag[],
|
|
20
|
+
): {
|
|
21
|
+
old: Tag[];
|
|
22
|
+
new: Tag[];
|
|
23
|
+
remain: Tag[];
|
|
24
|
+
} {
|
|
25
|
+
const oldMap = new Map(
|
|
26
|
+
existingTags.map((item) => [`${item.group}#${item.sortValue}`, item]),
|
|
27
|
+
);
|
|
28
|
+
const newMap = new Map(
|
|
29
|
+
newTags.map((item) => [`${item.group}#${item.sortValue}`, item]),
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const remain: Tag[] = [];
|
|
33
|
+
const oldDiff: Tag[] = [];
|
|
34
|
+
const newDiff: Tag[] = [];
|
|
35
|
+
|
|
36
|
+
for (const [key, oldItem] of oldMap.entries()) {
|
|
37
|
+
if (newMap.has(key)) {
|
|
38
|
+
remain.push(oldItem);
|
|
39
|
+
newMap.delete(key); // Remove from newMap as it's already in remain
|
|
40
|
+
} else {
|
|
41
|
+
oldDiff.push(oldItem);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Remaining entries in newMap are new
|
|
46
|
+
for (const newItem of newMap.values()) {
|
|
47
|
+
newDiff.push(newItem);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
old: oldDiff,
|
|
52
|
+
new: newDiff,
|
|
53
|
+
remain,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function batchUpdateTags({
|
|
58
|
+
tagName,
|
|
59
|
+
entity,
|
|
60
|
+
diff,
|
|
61
|
+
}: {
|
|
62
|
+
tagName: string;
|
|
63
|
+
entity: Entity<EntityType>;
|
|
64
|
+
diff: { old: Tag[]; new: Tag[] };
|
|
65
|
+
}): Promise<void> {
|
|
66
|
+
if (!entity.entityId) {
|
|
67
|
+
throw new Error('entityId is required');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const { old: tagsToRemove, new: tagsToAdd } = diff;
|
|
71
|
+
const { entityType, entityId } = entity;
|
|
72
|
+
|
|
73
|
+
const removePromises = tagsToRemove.reduce(
|
|
74
|
+
(acc, tag) => [
|
|
75
|
+
...acc,
|
|
76
|
+
container.tagRepository.deleteTag({
|
|
77
|
+
tagName,
|
|
78
|
+
group: tag.group,
|
|
79
|
+
sortValue: tag.sortValue,
|
|
80
|
+
entityType,
|
|
81
|
+
entityId,
|
|
82
|
+
}),
|
|
83
|
+
],
|
|
84
|
+
[] as Promise<any>[],
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
const addPromises = tagsToAdd.reduce(
|
|
88
|
+
(acc, tag) => [
|
|
89
|
+
...acc,
|
|
90
|
+
container.tagRepository.createTag({
|
|
91
|
+
tagName,
|
|
92
|
+
group: tag.group,
|
|
93
|
+
sortValue: tag.sortValue,
|
|
94
|
+
entity,
|
|
95
|
+
}),
|
|
96
|
+
],
|
|
97
|
+
[] as Promise<any>[],
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
await Promise.all([...removePromises, ...addPromises]);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export const handler = async (ev: SQSEvent) => {
|
|
104
|
+
const batchItemFailures: SQSBatchItemFailure[] = [];
|
|
105
|
+
|
|
106
|
+
for (const record of ev.Records) {
|
|
107
|
+
const body = parseSQSBusEvent<EventDetailBody>(record.body);
|
|
108
|
+
const { detail } = body;
|
|
109
|
+
const { entityType, entityId } = detail;
|
|
110
|
+
|
|
111
|
+
const errorContext: Record<string, unknown> = {};
|
|
112
|
+
errorContext.body = body;
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
const tagConfigs = EntityConfig[entityType]?.tags;
|
|
116
|
+
|
|
117
|
+
if (!tagConfigs || !tagConfigs.length) {
|
|
118
|
+
// skip if entity has no tag configs
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
await container.tagRepository.createLock({
|
|
123
|
+
entityType,
|
|
124
|
+
entityId,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
for (const tagConfig of tagConfigs) {
|
|
128
|
+
const { name, processor } = tagConfig;
|
|
129
|
+
|
|
130
|
+
const existingTags = await container.tagRepository.getExistingTags({
|
|
131
|
+
entityType,
|
|
132
|
+
entityId,
|
|
133
|
+
tagName: name,
|
|
134
|
+
});
|
|
135
|
+
errorContext.existingTags = existingTags;
|
|
136
|
+
|
|
137
|
+
const entity = await container.entityRepository.getEntity(
|
|
138
|
+
entityType,
|
|
139
|
+
entityId,
|
|
140
|
+
);
|
|
141
|
+
errorContext.entity = entity;
|
|
142
|
+
|
|
143
|
+
const newTags = await processor(
|
|
144
|
+
entity as unknown as CreatedEntity<EntityType>,
|
|
145
|
+
);
|
|
146
|
+
errorContext.newTags = newTags;
|
|
147
|
+
|
|
148
|
+
const diff = compareTags(existingTags, newTags);
|
|
149
|
+
errorContext.diff = diff;
|
|
150
|
+
|
|
151
|
+
await batchUpdateTags({
|
|
152
|
+
tagName: name,
|
|
153
|
+
entity,
|
|
154
|
+
diff,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
await container.tagRepository.deleteLock({
|
|
159
|
+
entityType,
|
|
160
|
+
entityId,
|
|
161
|
+
});
|
|
162
|
+
} catch (err) {
|
|
163
|
+
console.log(
|
|
164
|
+
'===TAG-PROCESSOR ERROR===',
|
|
165
|
+
err,
|
|
166
|
+
JSON.stringify({ errorContext }, null, 2),
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
batchItemFailures.push({ itemIdentifier: record.messageId });
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return { batchItemFailures };
|
|
174
|
+
};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { DynamoDB } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { CORE_TABLE } from '#/configs/service.config';
|
|
3
|
+
import { getDependencies } from '#/helpers/dependencies';
|
|
4
|
+
import type { publishEvent as publishEventType } from '#/helpers/event';
|
|
5
|
+
|
|
6
|
+
import { DbUtils } from '#/data/DbUtils';
|
|
7
|
+
import { EntityRepository } from '#/data/Entity';
|
|
8
|
+
import { EventUtils } from '#/data/EventUtils';
|
|
9
|
+
import { MutualRepository } from '#/data/Mutual';
|
|
10
|
+
import { TagRepository } from '#/data/Tag';
|
|
11
|
+
|
|
12
|
+
import { CreateEntityController } from '#/controllers/entity/create-entity.controller';
|
|
13
|
+
import { DeleteEntityController } from '#/controllers/entity/delete-entity.controller';
|
|
14
|
+
import { GetEntityController } from '#/controllers/entity/get-entity.controller';
|
|
15
|
+
import { ListEntitiesController } from '#/controllers/entity/list-entities.controller';
|
|
16
|
+
import { UpdateEntityController } from '#/controllers/entity/update-entity.controller';
|
|
17
|
+
import { UpsertEntityController } from '#/controllers/entity/upsert-entity.controller';
|
|
18
|
+
import { CreateMutualController } from '#/controllers/mutual/create-mutual.controller';
|
|
19
|
+
import { DeleteMutualController } from '#/controllers/mutual/delete-mutual.controller';
|
|
20
|
+
import { GetMutualController } from '#/controllers/mutual/get-mutual.controller';
|
|
21
|
+
import { ListEntitiesByEntityController } from '#/controllers/mutual/list-entities-by-entity.controller';
|
|
22
|
+
import { UpdateMutualController } from '#/controllers/mutual/update-mutual.controller';
|
|
23
|
+
import { EntityService } from './entity.service';
|
|
24
|
+
import { MutualService } from './mutual.service';
|
|
25
|
+
|
|
26
|
+
import { ListTagsController } from '#/controllers/tag/list-tags.controller';
|
|
27
|
+
|
|
28
|
+
export class DependencyContainer {
|
|
29
|
+
private _instanceCache: Map<string, any>;
|
|
30
|
+
private _publishEvent: typeof publishEventType | null;
|
|
31
|
+
private _tableName: string;
|
|
32
|
+
|
|
33
|
+
constructor() {
|
|
34
|
+
this._instanceCache = new Map();
|
|
35
|
+
this._publishEvent = null;
|
|
36
|
+
this._tableName = CORE_TABLE;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
createCachedInstance<T extends new (...args: any[]) => any>(
|
|
40
|
+
ClassRef: T,
|
|
41
|
+
...args: ConstructorParameters<T>
|
|
42
|
+
): InstanceType<T> {
|
|
43
|
+
const cacheKey = ClassRef.name;
|
|
44
|
+
|
|
45
|
+
if (this._instanceCache.has(cacheKey)) {
|
|
46
|
+
return this._instanceCache.get(cacheKey) as InstanceType<T>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const instance = new ClassRef(...args);
|
|
50
|
+
this._instanceCache.set(cacheKey, instance);
|
|
51
|
+
return instance;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
get coreTable(): string {
|
|
55
|
+
if (this._tableName) return this._tableName;
|
|
56
|
+
|
|
57
|
+
this._tableName = CORE_TABLE;
|
|
58
|
+
return this._tableName;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get publishEvent(): typeof publishEventType {
|
|
62
|
+
// for non class based function you can still have your own way of constructing
|
|
63
|
+
if (this._publishEvent) return this._publishEvent;
|
|
64
|
+
|
|
65
|
+
this._publishEvent = getDependencies().publishEvent;
|
|
66
|
+
return this._publishEvent;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
get dynamodbClient(): DynamoDB {
|
|
70
|
+
return this.createCachedInstance(DynamoDB);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
get dbUtils(): DbUtils {
|
|
74
|
+
return this.createCachedInstance(DbUtils, this.dynamodbClient);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
get eventUtils(): EventUtils {
|
|
78
|
+
return this.createCachedInstance(EventUtils, this.publishEvent);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
get entityRepository(): EntityRepository {
|
|
82
|
+
return this.createCachedInstance(
|
|
83
|
+
EntityRepository,
|
|
84
|
+
this.coreTable,
|
|
85
|
+
this.dynamodbClient,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
get mutualRepository(): MutualRepository {
|
|
90
|
+
return this.createCachedInstance(
|
|
91
|
+
MutualRepository,
|
|
92
|
+
this.coreTable,
|
|
93
|
+
this.dynamodbClient,
|
|
94
|
+
this.dbUtils,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
get entityService(): EntityService {
|
|
99
|
+
return this.createCachedInstance(
|
|
100
|
+
EntityService,
|
|
101
|
+
this.entityRepository,
|
|
102
|
+
this.publishEvent,
|
|
103
|
+
this.eventUtils,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
get mutualService(): MutualService {
|
|
108
|
+
return this.createCachedInstance(
|
|
109
|
+
MutualService,
|
|
110
|
+
this.entityRepository,
|
|
111
|
+
this.mutualRepository,
|
|
112
|
+
this.publishEvent,
|
|
113
|
+
this.eventUtils,
|
|
114
|
+
this.dbUtils,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
get tagRepository(): TagRepository {
|
|
119
|
+
return this.createCachedInstance(
|
|
120
|
+
TagRepository,
|
|
121
|
+
this.coreTable,
|
|
122
|
+
this.dynamodbClient,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
get getEntityController(): GetEntityController {
|
|
127
|
+
return this.createCachedInstance(
|
|
128
|
+
GetEntityController,
|
|
129
|
+
this.entityRepository,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
get listEntitiesController(): ListEntitiesController {
|
|
134
|
+
return this.createCachedInstance(
|
|
135
|
+
ListEntitiesController,
|
|
136
|
+
this.entityRepository,
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
get createEntityController(): CreateEntityController {
|
|
141
|
+
return this.createCachedInstance(
|
|
142
|
+
CreateEntityController,
|
|
143
|
+
this.entityService,
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
get upsertEntityController(): UpsertEntityController {
|
|
148
|
+
return this.createCachedInstance(
|
|
149
|
+
UpsertEntityController,
|
|
150
|
+
this.entityRepository,
|
|
151
|
+
this.publishEvent,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
get updateEntityController(): UpdateEntityController {
|
|
156
|
+
return this.createCachedInstance(
|
|
157
|
+
UpdateEntityController,
|
|
158
|
+
this.entityService,
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
get deleteEntityController(): DeleteEntityController {
|
|
163
|
+
return this.createCachedInstance(
|
|
164
|
+
DeleteEntityController,
|
|
165
|
+
this.entityService,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
get listEntitiesByEntityController(): ListEntitiesByEntityController {
|
|
170
|
+
return this.createCachedInstance(
|
|
171
|
+
ListEntitiesByEntityController,
|
|
172
|
+
this.mutualRepository,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
get getMutualController(): GetMutualController {
|
|
177
|
+
return this.createCachedInstance(
|
|
178
|
+
GetMutualController,
|
|
179
|
+
this.mutualRepository,
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
get createMutualController(): CreateMutualController {
|
|
184
|
+
return this.createCachedInstance(
|
|
185
|
+
CreateMutualController,
|
|
186
|
+
this.mutualService,
|
|
187
|
+
this.publishEvent,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
get updateMutualController(): UpdateMutualController {
|
|
192
|
+
return this.createCachedInstance(
|
|
193
|
+
UpdateMutualController,
|
|
194
|
+
this.mutualService,
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
get deleteMutualController(): DeleteMutualController {
|
|
199
|
+
return this.createCachedInstance(
|
|
200
|
+
DeleteMutualController,
|
|
201
|
+
this.mutualService,
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
get listTagsController(): ListTagsController {
|
|
206
|
+
return this.createCachedInstance(ListTagsController, this.tagRepository);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Entity as EntityType } from '@monorise/base';
|
|
2
|
+
import type { Entity } from '#/data/Entity';
|
|
3
|
+
import type { EventUtils } from '#/data/EventUtils';
|
|
4
|
+
import type { publishEvent as publishEventType } from '#/helpers/event';
|
|
5
|
+
import { EntityConfig } from '#/lambda-layer/monorise';
|
|
6
|
+
import { EVENT } from '#/types/event';
|
|
7
|
+
|
|
8
|
+
export const afterCreateEntityHook = async <T extends EntityType>({
|
|
9
|
+
entity,
|
|
10
|
+
entityPayload = {},
|
|
11
|
+
accountId,
|
|
12
|
+
publishEvent,
|
|
13
|
+
eventUtils,
|
|
14
|
+
}: {
|
|
15
|
+
entity: Entity<T>;
|
|
16
|
+
entityPayload?: Record<string, unknown>;
|
|
17
|
+
accountId?: string | string[];
|
|
18
|
+
publishEvent: typeof publishEventType;
|
|
19
|
+
eventUtils: EventUtils;
|
|
20
|
+
}) => {
|
|
21
|
+
const mutualSchema = EntityConfig[entity.entityType].mutual?.mutualSchema;
|
|
22
|
+
const parsedMutualPayload = mutualSchema?.parse(entityPayload);
|
|
23
|
+
|
|
24
|
+
if (parsedMutualPayload) {
|
|
25
|
+
await eventUtils.publishCreateMutualsEvent({
|
|
26
|
+
entity,
|
|
27
|
+
mutualPayload: parsedMutualPayload,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
await publishEvent({
|
|
32
|
+
event: EVENT.CORE.ENTITY_CREATED,
|
|
33
|
+
payload: {
|
|
34
|
+
entityType: entity.entityType,
|
|
35
|
+
entityId: entity.entityId,
|
|
36
|
+
data: entity.data,
|
|
37
|
+
createdByAccountId: accountId,
|
|
38
|
+
publishedAt: entity.updatedAt || new Date().toISOString(),
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
};
|