mongodb-dynamic-api 1.6.0 → 2.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/CHANGELOG.md +65 -19
- package/README.md +91 -67
- package/package.json +13 -1
- package/src/builders/casl/casl-ability.builder.d.ts +5 -0
- package/src/builders/casl/casl-ability.builder.js +14 -0
- package/src/builders/index.d.ts +3 -1
- package/src/builders/index.js +3 -1
- package/src/builders/route-decorators/auth-decorators.builder.d.ts +7 -0
- package/src/builders/route-decorators/auth-decorators.builder.js +14 -0
- package/src/builders/route-decorators/route-decorators.builder.d.ts +23 -0
- package/src/builders/route-decorators/route-decorators.builder.js +110 -0
- package/src/decorators/check-policies.decorator.d.ts +5 -0
- package/src/decorators/check-policies.decorator.js +8 -0
- package/src/decorators/index.d.ts +2 -0
- package/src/decorators/index.js +2 -0
- package/src/decorators/public.decorator.d.ts +3 -0
- package/src/decorators/public.decorator.js +8 -0
- package/src/dtos/delete-many-entity.query.d.ts +3 -0
- package/src/dtos/delete-many-entity.query.js +24 -0
- package/src/dtos/index.d.ts +1 -0
- package/src/dtos/index.js +1 -0
- package/src/dynamic-api.module.d.ts +6 -4
- package/src/dynamic-api.module.js +145 -69
- package/src/guards/base-policies.guard.d.ts +13 -0
- package/src/guards/base-policies.guard.js +32 -0
- package/src/guards/dynamic-api-jwt-auth.guard.d.ts +11 -0
- package/src/guards/dynamic-api-jwt-auth.guard.js +38 -0
- package/src/guards/index.d.ts +2 -0
- package/src/guards/index.js +18 -0
- package/src/helpers/controller-ability-predicates.helper.d.ts +4 -0
- package/src/helpers/controller-ability-predicates.helper.js +18 -0
- package/src/helpers/format.helper.d.ts +2 -0
- package/src/helpers/format.helper.js +12 -0
- package/src/helpers/index.d.ts +6 -1
- package/src/helpers/index.js +6 -1
- package/src/helpers/route-decorators.helper.d.ts +2 -2
- package/src/helpers/route-description.helper.d.ts +3 -0
- package/src/helpers/route-description.helper.js +34 -0
- package/src/helpers/schema.helper.d.ts +28 -0
- package/src/helpers/schema.helper.js +27 -0
- package/src/helpers/swagger-config.helper.d.ts +4 -0
- package/src/helpers/{config.helper.js → swagger-config.helper.js} +37 -21
- package/src/helpers/validation-config.helper.d.ts +3 -0
- package/src/helpers/validation-config.helper.js +8 -0
- package/src/helpers/versioning-config.helper.d.ts +4 -0
- package/src/helpers/versioning-config.helper.js +15 -0
- package/src/index.d.ts +3 -1
- package/src/index.js +3 -1
- package/src/interceptors/dynamic-api-cache.interceptor.d.ts +16 -0
- package/src/interceptors/dynamic-api-cache.interceptor.js +48 -0
- package/src/interceptors/index.d.ts +1 -0
- package/src/interceptors/index.js +17 -0
- package/src/interfaces/dynamic-api-cache-options.interface.d.ts +9 -0
- package/src/interfaces/dynamic-api-casl-ability.interface.d.ts +9 -0
- package/src/interfaces/dynamic-api-controller-options.interface.d.ts +12 -0
- package/src/interfaces/dynamic-api-decorator-builder.interface.d.ts +5 -0
- package/src/interfaces/dynamic-api-global-state.interface.d.ts +16 -0
- package/src/interfaces/dynamic-api-options.interface.d.ts +14 -11
- package/src/interfaces/dynamic-api-options.interface.js +3 -0
- package/src/interfaces/dynamic-api-policy-handler.interface.d.ts +16 -0
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +15 -0
- package/src/interfaces/dynamic-api-route-dtos-bundle.type.d.ts +8 -0
- package/src/interfaces/dynamic-api-route-module.type.d.ts +3 -0
- package/src/interfaces/dynamic-api-route-type.type.d.ts +2 -0
- package/src/interfaces/dynamic-api-schema-options.interface.d.ts +7 -1
- package/src/interfaces/dynamic-api-schema-options.interface.js +14 -0
- package/src/interfaces/{service-provider.interface.d.ts → dynamic-api-service-provider.interface.d.ts} +2 -2
- package/src/{helpers/config.helper.d.ts → interfaces/dynamic-api-swagger-options.type.d.ts} +23 -15
- package/src/interfaces/index.d.ts +13 -4
- package/src/interfaces/index.js +13 -4
- package/src/mixins/create-policies-guard.mixin.d.ts +5 -0
- package/src/mixins/create-policies-guard.mixin.js +37 -0
- package/src/mixins/entity-presenter.mixin.d.ts +1 -1
- package/src/mixins/entity-presenter.mixin.js +12 -2
- package/src/mixins/index.d.ts +1 -0
- package/src/mixins/index.js +1 -0
- package/src/models/base-entity.model.d.ts +1 -1
- package/src/modules/auth/auth.helper.d.ts +10 -0
- package/src/modules/auth/auth.helper.js +103 -0
- package/src/modules/auth/auth.module.d.ts +12 -0
- package/src/modules/auth/auth.module.js +55 -0
- package/src/modules/auth/guards/index.d.ts +2 -0
- package/src/modules/auth/guards/index.js +18 -0
- package/src/modules/auth/guards/jwt-auth.guard.d.ts +4 -0
- package/src/modules/auth/guards/jwt-auth.guard.js +17 -0
- package/src/modules/auth/guards/local-auth.guard.d.ts +4 -0
- package/src/modules/auth/guards/local-auth.guard.js +17 -0
- package/src/modules/auth/index.d.ts +7 -0
- package/src/modules/auth/index.js +23 -0
- package/src/modules/auth/interfaces/auth-controller.interface.d.ts +9 -0
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +25 -0
- package/src/modules/auth/interfaces/auth-service.interface.d.ts +12 -0
- package/src/modules/auth/interfaces/index.d.ts +3 -0
- package/src/modules/auth/interfaces/index.js +19 -0
- package/src/modules/auth/mixins/auth-controller.mixin.d.ts +5 -0
- package/src/modules/auth/mixins/auth-controller.mixin.js +118 -0
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.d.ts +6 -0
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.js +59 -0
- package/src/modules/auth/mixins/index.d.ts +2 -0
- package/src/modules/auth/mixins/index.js +18 -0
- package/src/modules/auth/services/base-auth.service.d.ts +51 -0
- package/src/modules/auth/services/base-auth.service.js +64 -0
- package/src/modules/auth/services/index.d.ts +1 -0
- package/src/modules/auth/services/index.js +17 -0
- package/src/modules/auth/strategies/index.d.ts +1 -0
- package/src/modules/auth/strategies/index.js +17 -0
- package/src/modules/auth/strategies/jwt.strategy.d.ts +8 -0
- package/src/modules/auth/strategies/jwt.strategy.js +35 -0
- package/src/modules/dynamic-api-config/dynamic-api-config.module.d.ts +5 -0
- package/src/modules/dynamic-api-config/dynamic-api-config.module.js +31 -0
- package/src/modules/dynamic-api-config/index.d.ts +1 -0
- package/src/modules/dynamic-api-config/index.js +17 -0
- package/src/modules/index.d.ts +2 -8
- package/src/modules/index.js +2 -8
- package/src/routes/create-many/create-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/create-many/create-many-controller.mixin.js +31 -9
- package/src/routes/create-many/create-many.helper.d.ts +7 -0
- package/src/{modules → routes}/create-many/create-many.helper.js +14 -11
- package/src/routes/create-many/create-many.module.d.ts +6 -0
- package/src/{modules → routes}/create-many/create-many.module.js +3 -3
- package/src/routes/create-one/create-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/create-one/create-one-controller.mixin.js +29 -7
- package/src/routes/create-one/create-one.helper.d.ts +7 -0
- package/src/{modules → routes}/create-one/create-one.helper.js +14 -11
- package/src/routes/create-one/create-one.module.d.ts +6 -0
- package/src/{modules → routes}/create-one/create-one.module.js +4 -4
- package/src/routes/delete-many/base-delete-many.service.d.ts +34 -0
- package/src/routes/delete-many/base-delete-many.service.js +29 -0
- package/src/routes/delete-many/delete-many-controller.interface.d.ts +8 -0
- package/src/routes/delete-many/delete-many-controller.interface.js +2 -0
- package/src/routes/delete-many/delete-many-controller.mixin.d.ts +6 -0
- package/src/routes/delete-many/delete-many-controller.mixin.js +77 -0
- package/src/routes/delete-many/delete-many-service.interface.d.ts +6 -0
- package/src/routes/delete-many/delete-many-service.interface.js +2 -0
- package/src/routes/delete-many/delete-many.helper.d.ts +7 -0
- package/src/routes/delete-many/delete-many.helper.js +71 -0
- package/src/routes/delete-many/delete-many.module.d.ts +6 -0
- package/src/routes/delete-many/delete-many.module.js +28 -0
- package/src/routes/delete-many/delete-many.presenter.d.ts +3 -0
- package/src/routes/delete-many/delete-many.presenter.js +20 -0
- package/src/routes/delete-many/index.d.ts +7 -0
- package/src/routes/delete-many/index.js +23 -0
- package/src/routes/delete-one/delete-one-controller.interface.js +2 -0
- package/src/routes/delete-one/delete-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/delete-one/delete-one-controller.mixin.js +30 -7
- package/src/routes/delete-one/delete-one-service.interface.js +2 -0
- package/src/routes/delete-one/delete-one.helper.d.ts +7 -0
- package/src/{modules → routes}/delete-one/delete-one.helper.js +14 -11
- package/src/routes/delete-one/delete-one.module.d.ts +6 -0
- package/src/{modules → routes}/delete-one/delete-one.module.js +4 -4
- package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +33 -0
- package/src/routes/duplicate-many/base-duplicate-many.service.js +43 -0
- package/src/routes/duplicate-many/duplicate-many-controller.interface.d.ts +7 -0
- package/src/routes/duplicate-many/duplicate-many-controller.interface.js +2 -0
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.d.ts +6 -0
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.js +85 -0
- package/src/routes/duplicate-many/duplicate-many-service.interface.d.ts +5 -0
- package/src/routes/duplicate-many/duplicate-many-service.interface.js +2 -0
- package/src/routes/duplicate-many/duplicate-many.helper.d.ts +7 -0
- package/src/routes/duplicate-many/duplicate-many.helper.js +71 -0
- package/src/routes/duplicate-many/duplicate-many.module.d.ts +6 -0
- package/src/routes/duplicate-many/duplicate-many.module.js +28 -0
- package/src/routes/duplicate-many/index.d.ts +6 -0
- package/src/routes/duplicate-many/index.js +22 -0
- package/src/routes/duplicate-one/duplicate-one-controller.interface.js +2 -0
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one-controller.mixin.js +30 -8
- package/src/routes/duplicate-one/duplicate-one-service.interface.js +2 -0
- package/src/routes/duplicate-one/duplicate-one.helper.d.ts +7 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one.helper.js +14 -11
- package/src/routes/duplicate-one/duplicate-one.module.d.ts +6 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one.module.js +4 -4
- package/src/routes/get-many/get-many-controller.interface.js +2 -0
- package/src/routes/get-many/get-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/get-many/get-many-controller.mixin.js +29 -7
- package/src/routes/get-many/get-many-service.interface.js +2 -0
- package/src/routes/get-many/get-many.helper.d.ts +7 -0
- package/src/{modules → routes}/get-many/get-many.helper.js +14 -11
- package/src/routes/get-many/get-many.module.d.ts +6 -0
- package/src/{modules → routes}/get-many/get-many.module.js +4 -4
- package/src/routes/get-one/get-one-controller.interface.js +2 -0
- package/src/routes/get-one/get-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/get-one/get-one-controller.mixin.js +30 -8
- package/src/routes/get-one/get-one-service.interface.js +2 -0
- package/src/routes/get-one/get-one.helper.d.ts +7 -0
- package/src/{modules → routes}/get-one/get-one.helper.js +14 -11
- package/src/routes/get-one/get-one.module.d.ts +6 -0
- package/src/{modules → routes}/get-one/get-one.module.js +4 -4
- package/src/routes/index.d.ts +11 -0
- package/src/routes/index.js +27 -0
- package/src/routes/replace-one/replace-one-controller.interface.js +2 -0
- package/src/routes/replace-one/replace-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/replace-one/replace-one-controller.mixin.js +30 -8
- package/src/routes/replace-one/replace-one-service.interface.js +2 -0
- package/src/routes/replace-one/replace-one.helper.d.ts +7 -0
- package/src/{modules → routes}/replace-one/replace-one.helper.js +14 -11
- package/src/routes/replace-one/replace-one.module.d.ts +6 -0
- package/src/{modules → routes}/replace-one/replace-one.module.js +4 -4
- package/src/routes/update-many/base-update-many.service.d.ts +33 -0
- package/src/routes/update-many/base-update-many.service.js +32 -0
- package/src/routes/update-many/index.d.ts +6 -0
- package/src/routes/update-many/index.js +22 -0
- package/src/routes/update-many/update-many-controller.interface.d.ts +7 -0
- package/src/routes/update-many/update-many-controller.interface.js +2 -0
- package/src/routes/update-many/update-many-controller.mixin.d.ts +6 -0
- package/src/routes/update-many/update-many-controller.mixin.js +85 -0
- package/src/routes/update-many/update-many-service.interface.d.ts +5 -0
- package/src/routes/update-many/update-many-service.interface.js +2 -0
- package/src/routes/update-many/update-many.helper.d.ts +7 -0
- package/src/routes/update-many/update-many.helper.js +71 -0
- package/src/routes/update-many/update-many.module.d.ts +6 -0
- package/src/routes/update-many/update-many.module.js +28 -0
- package/src/routes/update-one/update-one-controller.interface.js +2 -0
- package/src/routes/update-one/update-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/update-one/update-one-controller.mixin.js +30 -8
- package/src/routes/update-one/update-one-service.interface.js +2 -0
- package/src/routes/update-one/update-one.helper.d.ts +7 -0
- package/src/{modules → routes}/update-one/update-one.helper.js +14 -11
- package/src/routes/update-one/update-one.module.d.ts +6 -0
- package/src/{modules → routes}/update-one/update-one.module.js +4 -4
- package/src/services/{base.service.d.ts → base/base.service.d.ts} +1 -1
- package/src/services/{base.service.js → base/base.service.js} +2 -2
- package/src/services/bcrypt/bcrypt.service.d.ts +5 -0
- package/src/services/bcrypt/bcrypt.service.js +26 -0
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +11 -0
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +36 -0
- package/src/services/index.d.ts +3 -1
- package/src/services/index.js +3 -1
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/src/builders/route-decorators.builder.d.ts +0 -18
- package/src/builders/route-decorators.builder.js +0 -76
- package/src/interfaces/maybe-promise.type.d.ts +0 -2
- package/src/interfaces/route-config.interface.d.ts +0 -17
- package/src/modules/create-many/create-many-controller.mixin.d.ts +0 -6
- package/src/modules/create-many/create-many.helper.d.ts +0 -7
- package/src/modules/create-many/create-many.module.d.ts +0 -6
- package/src/modules/create-one/create-one-controller.mixin.d.ts +0 -6
- package/src/modules/create-one/create-one.helper.d.ts +0 -7
- package/src/modules/create-one/create-one.module.d.ts +0 -6
- package/src/modules/delete-one/delete-one-controller.mixin.d.ts +0 -6
- package/src/modules/delete-one/delete-one.helper.d.ts +0 -7
- package/src/modules/delete-one/delete-one.module.d.ts +0 -6
- package/src/modules/duplicate-one/duplicate-one-controller.mixin.d.ts +0 -6
- package/src/modules/duplicate-one/duplicate-one.helper.d.ts +0 -7
- package/src/modules/duplicate-one/duplicate-one.module.d.ts +0 -6
- package/src/modules/get-many/get-many-controller.mixin.d.ts +0 -6
- package/src/modules/get-many/get-many.helper.d.ts +0 -7
- package/src/modules/get-many/get-many.module.d.ts +0 -6
- package/src/modules/get-one/get-one-controller.mixin.d.ts +0 -6
- package/src/modules/get-one/get-one.helper.d.ts +0 -7
- package/src/modules/get-one/get-one.module.d.ts +0 -6
- package/src/modules/replace-one/replace-one-controller.mixin.d.ts +0 -6
- package/src/modules/replace-one/replace-one.helper.d.ts +0 -7
- package/src/modules/replace-one/replace-one.module.d.ts +0 -6
- package/src/modules/update-one/update-one-controller.mixin.d.ts +0 -6
- package/src/modules/update-one/update-one.helper.d.ts +0 -7
- package/src/modules/update-one/update-one.module.d.ts +0 -6
- package/src/interfaces/{entity-mappers.interface.js → dynamic-api-cache-options.interface.js} +0 -0
- package/src/interfaces/{maybe-promise.type.js → dynamic-api-casl-ability.interface.js} +0 -0
- package/src/interfaces/{route-config.interface.js → dynamic-api-controller-options.interface.js} +0 -0
- package/src/interfaces/{service-provider.interface.js → dynamic-api-decorator-builder.interface.js} +0 -0
- package/src/interfaces/{entity-mappers.interface.d.ts → dynamic-api-entity-mappers.interface.d.ts} +0 -0
- package/src/{modules/create-many/create-many-controller.interface.js → interfaces/dynamic-api-entity-mappers.interface.js} +0 -0
- package/src/{modules/create-many/create-many-service.interface.js → interfaces/dynamic-api-global-state.interface.js} +0 -0
- package/src/{modules/create-one/create-one-controller.interface.js → interfaces/dynamic-api-policy-handler.interface.js} +0 -0
- package/src/{modules/create-one/create-one-service.interface.js → interfaces/dynamic-api-route-config.interface.js} +0 -0
- package/src/{modules/delete-one/delete-one-controller.interface.js → interfaces/dynamic-api-route-dtos-bundle.type.js} +0 -0
- package/src/{modules/delete-one/delete-one-service.interface.js → interfaces/dynamic-api-route-module.type.js} +0 -0
- package/src/{modules/duplicate-one/duplicate-one-controller.interface.js → interfaces/dynamic-api-route-type.type.js} +0 -0
- package/src/{modules/duplicate-one/duplicate-one-service.interface.js → interfaces/dynamic-api-service-provider.interface.js} +0 -0
- package/src/{modules/get-many/get-many-controller.interface.js → interfaces/dynamic-api-swagger-options.type.js} +0 -0
- package/src/modules/{get-many/get-many-service.interface.js → auth/interfaces/auth-controller.interface.js} +0 -0
- package/src/modules/{get-one/get-one-controller.interface.js → auth/interfaces/auth-options.interface.js} +0 -0
- package/src/modules/{get-one/get-one-service.interface.js → auth/interfaces/auth-service.interface.js} +0 -0
- package/src/{modules → routes}/create-many/base-create-many.service.d.ts +0 -0
- package/src/{modules → routes}/create-many/base-create-many.service.js +0 -0
- package/src/{modules → routes}/create-many/create-many-controller.interface.d.ts +0 -0
- package/src/{modules/replace-one/replace-one-controller.interface.js → routes/create-many/create-many-controller.interface.js} +0 -0
- package/src/{modules → routes}/create-many/create-many-service.interface.d.ts +0 -0
- package/src/{modules/replace-one/replace-one-service.interface.js → routes/create-many/create-many-service.interface.js} +0 -0
- package/src/{modules → routes}/create-many/index.d.ts +0 -0
- package/src/{modules → routes}/create-many/index.js +0 -0
- package/src/{modules → routes}/create-one/base-create-one.service.d.ts +0 -0
- package/src/{modules → routes}/create-one/base-create-one.service.js +0 -0
- package/src/{modules → routes}/create-one/create-one-controller.interface.d.ts +0 -0
- package/src/{modules/update-one/update-one-controller.interface.js → routes/create-one/create-one-controller.interface.js} +0 -0
- package/src/{modules → routes}/create-one/create-one-service.interface.d.ts +0 -0
- package/src/{modules/update-one/update-one-service.interface.js → routes/create-one/create-one-service.interface.js} +0 -0
- package/src/{modules → routes}/create-one/index.d.ts +0 -0
- package/src/{modules → routes}/create-one/index.js +0 -0
- package/src/{modules → routes}/delete-one/base-delete-one.service.d.ts +0 -0
- package/src/{modules → routes}/delete-one/base-delete-one.service.js +0 -0
- package/src/{modules → routes}/delete-one/delete-one-controller.interface.d.ts +0 -0
- package/src/{modules → routes}/delete-one/delete-one-service.interface.d.ts +0 -0
- package/src/{modules → routes}/delete-one/delete-one.presenter.d.ts +0 -0
- package/src/{modules → routes}/delete-one/delete-one.presenter.js +0 -0
- package/src/{modules → routes}/delete-one/index.d.ts +0 -0
- package/src/{modules → routes}/delete-one/index.js +0 -0
- package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.js +0 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one-controller.interface.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one-service.interface.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/index.d.ts +0 -0
- package/src/{modules → routes}/duplicate-one/index.js +0 -0
- package/src/{modules → routes}/get-many/base-get-many.service.d.ts +0 -0
- package/src/{modules → routes}/get-many/base-get-many.service.js +1 -1
- /package/src/{modules → routes}/get-many/get-many-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-many/get-many-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-many/index.d.ts +0 -0
- /package/src/{modules → routes}/get-many/index.js +0 -0
- /package/src/{modules → routes}/get-one/base-get-one.service.d.ts +0 -0
- /package/src/{modules → routes}/get-one/base-get-one.service.js +0 -0
- /package/src/{modules → routes}/get-one/get-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-one/get-one-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-one/index.d.ts +0 -0
- /package/src/{modules → routes}/get-one/index.js +0 -0
- /package/src/{modules → routes}/replace-one/base-replace-one.service.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/base-replace-one.service.js +0 -0
- /package/src/{modules → routes}/replace-one/index.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/index.js +0 -0
- /package/src/{modules → routes}/replace-one/replace-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/replace-one-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-one/base-update-one.service.d.ts +0 -0
- /package/src/{modules → routes}/update-one/base-update-one.service.js +0 -0
- /package/src/{modules → routes}/update-one/index.d.ts +0 -0
- /package/src/{modules → routes}/update-one/index.js +0 -0
- /package/src/{modules → routes}/update-one/update-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-one/update-one-service.interface.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,43 +1,89 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
|
|
3
|
-
## [
|
|
3
|
+
## [2.0.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.3...v2.0.0) (2024-03-18)
|
|
4
4
|
|
|
5
|
-
## [1.5.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/release...1.5.0) (2024-03-03)
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
* **schema-options:** bind event type to route type to improve understanding
|
|
9
|
+
* **authentication:** rework options
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
### schema-options
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
* **schema-options:** bind event type to route type to improve understanding ([8a6a391](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/8a6a391c19a68697998ed6508d88ed63c1fbde7d))
|
|
14
14
|
|
|
15
|
-
## [1.2.0-beta.8](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/release...1.2.0-beta.8) (2024-03-02)
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
### authentication
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
* **authentication:** rework options ([e833898](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/e833898903279e1e1e220b065724e013b1729029))
|
|
20
19
|
|
|
21
|
-
## [1.
|
|
20
|
+
## [1.4.3](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.2...v1.4.3) (2024-03-15)
|
|
22
21
|
|
|
23
|
-
## [1.2
|
|
22
|
+
## [1.4.2](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.1...v1.4.2) (2024-03-15)
|
|
24
23
|
|
|
25
|
-
## [1.
|
|
24
|
+
## [1.4.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.4.0...v1.4.1) (2024-03-12)
|
|
26
25
|
|
|
27
|
-
## [1.
|
|
26
|
+
## [1.4.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.3...v1.4.0) (2024-03-11)
|
|
28
27
|
|
|
29
|
-
## [1.2.0-beta.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.1) (2024-02-29)
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
### authentication
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
* **authentication:** add register ability predicate ([811b085](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/811b0853ed836ce33a7a56312c3e045b5f73f5ee))
|
|
34
32
|
|
|
35
33
|
|
|
36
|
-
###
|
|
34
|
+
### api
|
|
35
|
+
|
|
36
|
+
* **api:** add authentication ([a692b7b](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/a692b7b0fcd774dc5152b9f82ed22107c543110a))
|
|
37
|
+
* **api:** add casl ability to control route access ([6202a24](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/6202a247d301a7a72ce47f596a288d66724999f1))
|
|
38
|
+
|
|
39
|
+
## [1.3.3](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.2...v1.3.3) (2024-03-06)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### api
|
|
43
|
+
|
|
44
|
+
* **api:** display the package version in swagger by default ([36520c3](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/36520c37abdd4fcbbfeed333a68ea0a108533b39))
|
|
45
|
+
|
|
46
|
+
## [1.3.2](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.1...v1.3.2) (2024-03-05)
|
|
47
|
+
|
|
48
|
+
## [1.3.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.3.0...v1.3.1) (2024-03-05)
|
|
49
|
+
|
|
50
|
+
## [1.3.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.2.1...v1.3.0) (2024-03-04)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### api
|
|
54
|
+
|
|
55
|
+
* **api:** add delete many route ([43a89cb](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/43a89cb4c087c468743559950fa232ff6e10c140))
|
|
56
|
+
* **api:** add duplicate many route ([be33d1b](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/be33d1b221d81c5ff6649cd2eccc331cb58459b9))
|
|
57
|
+
* **api:** add update many route ([7543eb9](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/7543eb92d7ba538f6d46b69ec194a6c44daff5b2))
|
|
58
|
+
|
|
59
|
+
## [1.2.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.2.0...v1.2.1) (2024-03-04)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## [1.2.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.1.0...v1.2.0) (2024-03-03)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
### api
|
|
66
|
+
|
|
67
|
+
* **api:** add default route description if not specified ([733b42a](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/733b42a6dab49c39370fdd4094b7f08288e54c5b))
|
|
68
|
+
|
|
69
|
+
## 1.1.0 (2024-03-03)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
### api
|
|
73
|
+
|
|
74
|
+
* **api:** add the possibility to enable the api uri versioning ([0f52917](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/0f529174ea583078bb136d2db484ef64b6aa6e49))
|
|
75
|
+
* **api:** correct CreateMany response type and body ([804b7d5](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/804b7d55fe2b8b515436b41fa338be75c5e030e2))
|
|
76
|
+
* **api:** make routes optional, add all routes automatically if not configured ([f17e2eb](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/f17e2ebdbbde8f05a5c80c404ffc1febf460bc20))
|
|
77
|
+
* **api:** set duplicate one body optional ([f24b2b9](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/f24b2b964e251fbb92acfc14222386fec3239dcb))
|
|
78
|
+
* **api:** add create-many module ([9ae72d5](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/9ae72d5dd7bda27423f96dd642d41eff31e75370))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
### swagger
|
|
82
|
+
|
|
83
|
+
* **swagger:** add enable method ([5f3f865](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/5f3f8656dc186e833d5c4792efacf9f0a2005afd))
|
|
37
84
|
|
|
38
|
-
* **routes:** add create-many module ([f6b6a25](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/f6b6a25edfc924ce5e305951db97c353465156e3))
|
|
39
85
|
|
|
40
|
-
##
|
|
86
|
+
## 1.0.0 (2024-02-27)
|
|
41
87
|
|
|
42
88
|
|
|
43
89
|
### Features
|
package/README.md
CHANGED
|
@@ -47,28 +47,36 @@
|
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
|
+
## mongodb-dynamic-api <img src="https://pbs.twimg.com/media/EDoWJbUXYAArclg.png" width="24" height="24" />
|
|
51
|
+
```text
|
|
52
|
+
npm install --save mongodb-dynamic-api
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
50
57
|
<div style="text-align: center; width: 100%;">
|
|
51
58
|
|
|
52
|
-
#
|
|
59
|
+
# Dynamic API Module
|
|
53
60
|
|
|
54
61
|
</div>
|
|
55
62
|
|
|
56
63
|
|
|
57
64
|
<p style="text-align: justify; width: 100%;font-size: 15px;">
|
|
58
65
|
|
|
59
|
-
|
|
66
|
+
In summary, DynamicApiModule is a flexible and configurable module using NestJS 10 that provides dynamic API functionality.
|
|
67
|
+
<br>It must be set up at the root level with global settings and then configured for individual features.
|
|
68
|
+
<br>It has several optional features such as
|
|
69
|
+
[Swagger UI](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger-ui.md),
|
|
70
|
+
[Versioning](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/versioning.md),
|
|
71
|
+
[Validation](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/validation.md),
|
|
72
|
+
[Caching](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/caching.md),
|
|
73
|
+
[Authentication](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authentication.md) and
|
|
74
|
+
[Authorization](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authorization.md).
|
|
60
75
|
|
|
61
76
|
</p>
|
|
62
77
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
## npm package <img src="https://pbs.twimg.com/media/EDoWJbUXYAArclg.png" width="24" height="24" />
|
|
66
|
-
```text
|
|
67
|
-
npm install --save mongodb-dynamic-api
|
|
68
|
-
```
|
|
69
|
-
|
|
78
|
+
___
|
|
70
79
|
|
|
71
|
-
---
|
|
72
80
|
### HOW TO ENJOY IT
|
|
73
81
|
|
|
74
82
|
- Start a new [nest](https://docs.nestjs.com/) project with **typescript** (use the `--strict` option)
|
|
@@ -76,18 +84,22 @@ npm install --save mongodb-dynamic-api
|
|
|
76
84
|
nest new --strict your-project-name
|
|
77
85
|
```
|
|
78
86
|
|
|
79
|
-
- Go to your project root and install the [mongodb-dynamic-api](https://www.npmjs.com/package/mongodb-dynamic-api) package
|
|
87
|
+
- Go to your new project root and install the [mongodb-dynamic-api](https://www.npmjs.com/package/mongodb-dynamic-api) package
|
|
80
88
|
```text
|
|
81
89
|
npm i -S mongodb-dynamic-api
|
|
82
90
|
```
|
|
91
|
+
**Basic Configuration**
|
|
92
|
+
|
|
93
|
+
- Add `DynamicApiModule.forRoot` to your `app.module.ts` and pass your **MongoDB connection string** to the method.
|
|
83
94
|
|
|
84
|
-
- Add DynamicApiModule to your app.module.ts and pass the MongoDB connection string to the `forRoot` method
|
|
85
95
|
```typescript
|
|
96
|
+
// src/app.module.ts
|
|
97
|
+
import { DynamicApiModule } from 'mongodb-dynamic-api';
|
|
98
|
+
|
|
86
99
|
@Module({
|
|
87
100
|
imports: [
|
|
88
|
-
// ...
|
|
89
101
|
DynamicApiModule.forRoot(
|
|
90
|
-
// <-
|
|
102
|
+
'mongodb-uri', // <- replace by your own MongoDB connection string
|
|
91
103
|
),
|
|
92
104
|
// ...
|
|
93
105
|
],
|
|
@@ -96,24 +108,46 @@ npm i -S mongodb-dynamic-api
|
|
|
96
108
|
})
|
|
97
109
|
export class AppModule {}
|
|
98
110
|
```
|
|
111
|
+
**Basic Usage**
|
|
112
|
+
|
|
113
|
+
- Ok, now let's add our first content with just 2 files. It will be a simple `User` with a `name` and an `email` field.
|
|
114
|
+
- We use the `@Schema` and `@Prop` decorators from the <a href="https://docs.nestjs.com/techniques/mongodb#model-injection" target="_blank">@nestjs/mongoose</a> package to define our MongoDB model.
|
|
115
|
+
|
|
116
|
+
- You must extend the `BaseEntity` | `SoftDeletableEntity` class from the `mongodb-dynamic-api` package **for all your collection models**.
|
|
117
|
+
**See more details [here](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/entities.md)**.
|
|
118
|
+
|
|
119
|
+
- You can also add the `@DynamicAPISchemaOptions` decorator to pass schema options.
|
|
120
|
+
**See more details [here](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/schema-options.md)**.
|
|
121
|
+
|
|
122
|
+
Just create a new file `user.ts` and add the following code.
|
|
99
123
|
|
|
100
|
-
- Ok, now let's add our first content. This content will be a simple `User` with a `name` and an `email` field.
|
|
101
124
|
```typescript
|
|
102
|
-
// user.ts
|
|
125
|
+
// src/users/user.ts
|
|
126
|
+
import { Prop, Schema } from '@nestjs/mongoose';
|
|
127
|
+
import { BaseEntity } from 'mongodb-dynamic-api';
|
|
128
|
+
|
|
103
129
|
@Schema({ collection: 'users' })
|
|
104
|
-
export class User extends BaseEntity { // <-
|
|
105
|
-
@Prop({ type: String })
|
|
130
|
+
export class User extends BaseEntity { // <- extends BaseEntity
|
|
131
|
+
@Prop({ type: String, required: true })
|
|
106
132
|
name: string;
|
|
107
133
|
|
|
108
|
-
@Prop({ type: String })
|
|
134
|
+
@Prop({ type: String, required: true })
|
|
109
135
|
email: string;
|
|
110
136
|
}
|
|
111
137
|
```
|
|
138
|
+
|
|
139
|
+
- Then we will use the `DynamicApiModule.forFeature` method to add the `User` API to our application.
|
|
140
|
+
- We pass the `User` class to the `entity` property and specify the path `users` to the `controllerOptions` property.
|
|
141
|
+
- Create a new file `users.module.ts` and add the following code.
|
|
142
|
+
|
|
112
143
|
```typescript
|
|
113
|
-
// users.module.ts
|
|
144
|
+
// src/users/users.module.ts
|
|
145
|
+
import { DynamicApiModule } from 'mongodb-dynamic-api';
|
|
146
|
+
import { User } from './user';
|
|
147
|
+
|
|
114
148
|
@Module({
|
|
115
149
|
imports: [
|
|
116
|
-
DynamicApiModule.forFeature({
|
|
150
|
+
DynamicApiModule.forFeature({
|
|
117
151
|
entity: User,
|
|
118
152
|
controllerOptions: {
|
|
119
153
|
path: 'users',
|
|
@@ -123,13 +157,20 @@ export class User extends BaseEntity { // <- you must extend BaseEntity
|
|
|
123
157
|
})
|
|
124
158
|
export class UsersModule {}
|
|
125
159
|
```
|
|
160
|
+
|
|
161
|
+
- Last step, add the `UsersModule` to the **imports** in the `app.module.ts` after the `DynamicApiModule.forRoot` method.
|
|
162
|
+
|
|
126
163
|
```typescript
|
|
127
|
-
// app.module.ts
|
|
164
|
+
// src/app.module.ts
|
|
165
|
+
import { DynamicApiModule } from 'mongodb-dynamic-api';
|
|
166
|
+
import { UsersModule } from './users/users.module';
|
|
167
|
+
|
|
128
168
|
@Module({
|
|
129
169
|
imports: [
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
170
|
+
DynamicApiModule.forRoot(
|
|
171
|
+
'mongodb-uri', // <- replace by your own MongoDB connection string
|
|
172
|
+
),
|
|
173
|
+
UsersModule,
|
|
133
174
|
],
|
|
134
175
|
controllers: [AppController],
|
|
135
176
|
providers: [AppService],
|
|
@@ -137,54 +178,37 @@ export class UsersModule {}
|
|
|
137
178
|
export class AppModule {}
|
|
138
179
|
```
|
|
139
180
|
|
|
140
|
-
**
|
|
181
|
+
**And that's all !** *You now have a fully functional CRUD API for the `User` content at the `/users` path.*
|
|
141
182
|
|
|
142
|
-
___
|
|
143
|
-
### Swagger (optional but recommended)
|
|
144
|
-
```typescript
|
|
145
|
-
async function bootstrap() {
|
|
146
|
-
const app = await NestFactory.create(AppModule);
|
|
147
|
-
// ...
|
|
148
|
-
enableDynamicAPISwagger(app); // <- add this line in your main.ts file
|
|
149
183
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
184
|
+
| Endpoint | Body | Param | Query |
|
|
185
|
+
|:--------------------------------------------------|:----------------------------------------------:|:------------:|:---------------:|
|
|
186
|
+
| GET **/users** <br>*Get many* | x | x | x |
|
|
187
|
+
| GET **/users/:id** <br>*Get one* | x | `id: string` | x |
|
|
188
|
+
| POST **/users/many** <br>*Create many* | `{ list: [{ name: string; email: string; }] }` | x | x |
|
|
189
|
+
| POST **/users** <br>*Create one* | `{ name: string; email: string; }` | x | x |
|
|
190
|
+
| PUT **/users/:id** <br>*Replace one* | `{ name: string; email: string; }` | `id: string` | x |
|
|
191
|
+
| PATCH **/users** <br>*Update many* | `{ name?: string; email?: string; }` | x | `ids: string[]` |
|
|
192
|
+
| PATCH **/users/:id** <br>*Update one* | `{ name?: string; email?: string; }` | `id: string` | x |
|
|
193
|
+
| DELETE **/users** <br>*Delete many* | x | x | `ids: string[]` |
|
|
194
|
+
| DELETE **/users/:id** <br>*Delete one* | x | `id: string` | x |
|
|
195
|
+
| POST **/users/duplicate** <br>*Duplicate many* | `{ name?: string; email?: string; }` | x | `ids: string[]` |
|
|
196
|
+
| POST **/users/duplicate/:id**<br>*Duplicate one* | `{ name?: string; email?: string; }` | `id: string` | x |
|
|
155
197
|
|
|
156
|
-
|
|
157
|
-
```typescript
|
|
158
|
-
// user.entity.ts
|
|
159
|
-
@Schema({ collection: 'users' })
|
|
160
|
-
export class UserEntity extends BaseEntity {
|
|
161
|
-
@ApiProperty() // <- add this line
|
|
162
|
-
@Prop({ type: String })
|
|
163
|
-
name: string;
|
|
164
|
-
|
|
165
|
-
@ApiProperty() // <- add this line
|
|
166
|
-
@Prop({ type: String })
|
|
167
|
-
email: string;
|
|
168
|
-
}
|
|
169
|
-
```
|
|
198
|
+
___
|
|
170
199
|
|
|
171
|
-
|
|
200
|
+
Go further with optional features like:
|
|
201
|
+
- **[Swagger UI](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger-ui.md)**
|
|
202
|
+
- **[Versioning](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/versioning.md)**
|
|
203
|
+
- **[Validation](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/validation.md)** with **Class Validator**
|
|
204
|
+
- **[Caching](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/caching.md)** with **cache-manager**
|
|
205
|
+
- **[Authentication](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authentication.md)** with **JWT**
|
|
206
|
+
- **[Authorization](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/authorization.md)** with **Casl**
|
|
172
207
|
|
|
173
208
|
|
|
174
|
-

|
|
175
209
|
|
|
176
|
-
[more screenshots](https://github.com/MikeDev75015/mongodb-dynamic-api/blob/develop/README/swagger.md)
|
|
177
210
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
async function bootstrap() {
|
|
182
|
-
const app = await NestFactory.create(AppModule);
|
|
183
|
-
// ...
|
|
184
|
-
enableDynamicAPIVersioning(app); // <- add this line in your main.ts file
|
|
211
|
+
<br>
|
|
212
|
+
<br>
|
|
213
|
+
<br>
|
|
185
214
|
|
|
186
|
-
await app.listen(3000);
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
The `enableDynamicAPIVersioning` function will automatically add versioning to the API. By default it will use the URI versioning type.
|
|
190
|
-
This method can be called with a second optional parameter to specify more options.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mongodb-dynamic-api",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Auto generated CRUD API for MongoDB using NestJS",
|
|
5
5
|
"readmeFilename": "README.md",
|
|
6
6
|
"main": "index.js",
|
|
@@ -38,17 +38,26 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://mikedev75015.github.io",
|
|
40
40
|
"dependencies": {
|
|
41
|
+
"@casl/ability": "^6.7.0",
|
|
42
|
+
"@nestjs/cache-manager": "^2.2.1",
|
|
41
43
|
"@nestjs/common": "^10.3.2",
|
|
42
44
|
"@nestjs/core": "^10.3.2",
|
|
45
|
+
"@nestjs/jwt": "^10.2.0",
|
|
43
46
|
"@nestjs/mongoose": "^10.0.4",
|
|
47
|
+
"@nestjs/passport": "^10.0.3",
|
|
44
48
|
"@nestjs/platform-express": "^10.3.2",
|
|
45
49
|
"@nestjs/swagger": "^7.3.0",
|
|
46
50
|
"@types/lodash": "^4.14.202",
|
|
51
|
+
"bcrypt": "^5.1.1",
|
|
47
52
|
"builder-pattern": "^2.2.0",
|
|
53
|
+
"cache-manager": "^5.4.0",
|
|
48
54
|
"class-transformer": "^0.5.1",
|
|
49
55
|
"class-validator": "^0.14.1",
|
|
50
56
|
"lodash": "^4.17.21",
|
|
51
57
|
"mongoose": "^8.1.1",
|
|
58
|
+
"passport": "^0.7.0",
|
|
59
|
+
"passport-jwt": "^4.0.1",
|
|
60
|
+
"passport-local": "^1.0.0",
|
|
52
61
|
"reflect-metadata": "^0.2.1",
|
|
53
62
|
"rxjs": "^7.8.1"
|
|
54
63
|
},
|
|
@@ -61,9 +70,12 @@
|
|
|
61
70
|
"@release-it/conventional-changelog": "^8.0.1",
|
|
62
71
|
"@swc/cli": "^0.3.9",
|
|
63
72
|
"@swc/core": "^1.4.0",
|
|
73
|
+
"@types/bcrypt": "^5.0.2",
|
|
64
74
|
"@types/express": "^4.17.21",
|
|
65
75
|
"@types/jest": "^29.5.12",
|
|
66
76
|
"@types/node": "^20.11.16",
|
|
77
|
+
"@types/passport-jwt": "^4.0.1",
|
|
78
|
+
"@types/passport-local": "^1.0.38",
|
|
67
79
|
"@types/supertest": "^6.0.2",
|
|
68
80
|
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
69
81
|
"@typescript-eslint/parser": "^6.21.0",
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
import { AppAbility, DynamicApiRouteCaslAbilityPredicate, RouteType } from '../../interfaces';
|
|
3
|
+
import { BaseEntity } from '../../models';
|
|
4
|
+
declare function CaslAbilityBuilder<Entity extends BaseEntity>(entity: Type<Entity>, routeType: RouteType, abilityPredicate: DynamicApiRouteCaslAbilityPredicate<Entity>, user: unknown): AppAbility<Entity>;
|
|
5
|
+
export { CaslAbilityBuilder };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CaslAbilityBuilder = void 0;
|
|
4
|
+
const ability_1 = require("@casl/ability");
|
|
5
|
+
function CaslAbilityBuilder(entity, routeType, abilityPredicate, user) {
|
|
6
|
+
const { can, build } = new ability_1.AbilityBuilder(ability_1.createMongoAbility);
|
|
7
|
+
if (abilityPredicate(new entity(), user)) {
|
|
8
|
+
can(routeType, entity);
|
|
9
|
+
}
|
|
10
|
+
return build({
|
|
11
|
+
detectSubjectType: (object) => object.constructor
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
exports.CaslAbilityBuilder = CaslAbilityBuilder;
|
package/src/builders/index.d.ts
CHANGED
package/src/builders/index.js
CHANGED
|
@@ -14,4 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./casl/casl-ability.builder"), exports);
|
|
18
|
+
__exportStar(require("./route-decorators/auth-decorators.builder"), exports);
|
|
19
|
+
__exportStar(require("./route-decorators/route-decorators.builder"), exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DynamicApiDecoratorBuilder } from '../../interfaces';
|
|
2
|
+
declare class AuthDecoratorsBuilder implements DynamicApiDecoratorBuilder<any> {
|
|
3
|
+
private readonly protectRegister;
|
|
4
|
+
constructor(protectRegister: boolean | undefined);
|
|
5
|
+
build(): (ClassDecorator & MethodDecorator)[];
|
|
6
|
+
}
|
|
7
|
+
export { AuthDecoratorsBuilder };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthDecoratorsBuilder = void 0;
|
|
4
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
5
|
+
const decorators_1 = require("../../decorators");
|
|
6
|
+
class AuthDecoratorsBuilder {
|
|
7
|
+
constructor(protectRegister) {
|
|
8
|
+
this.protectRegister = protectRegister;
|
|
9
|
+
}
|
|
10
|
+
build() {
|
|
11
|
+
return !this.protectRegister ? [(0, decorators_1.Public)()] : [(0, swagger_1.ApiBearerAuth)()];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.AuthDecoratorsBuilder = AuthDecoratorsBuilder;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
import { DynamicApiDecoratorBuilder, RouteType } from '../../interfaces';
|
|
3
|
+
import { BaseEntity } from '../../models';
|
|
4
|
+
declare class RouteDecoratorsBuilder<Entity extends BaseEntity> implements DynamicApiDecoratorBuilder<Entity> {
|
|
5
|
+
private readonly routeType;
|
|
6
|
+
private readonly entity;
|
|
7
|
+
private readonly version;
|
|
8
|
+
private readonly description;
|
|
9
|
+
private readonly isPublic;
|
|
10
|
+
private readonly dTOs;
|
|
11
|
+
private readonly responseRouteTypeIsArray;
|
|
12
|
+
private readonly bodyRouteTypeIsOptional;
|
|
13
|
+
constructor(routeType: RouteType, entity: Type<Entity>, version: string | undefined, description: string | undefined, isPublic: boolean | undefined, dTOs?: {
|
|
14
|
+
param?: Type;
|
|
15
|
+
query?: Type;
|
|
16
|
+
body?: Type;
|
|
17
|
+
presenter?: Type;
|
|
18
|
+
});
|
|
19
|
+
build(): any[];
|
|
20
|
+
private getRouteDecorators;
|
|
21
|
+
private getApiDecorators;
|
|
22
|
+
}
|
|
23
|
+
export { RouteDecoratorsBuilder };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RouteDecoratorsBuilder = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
6
|
+
const lodash_1 = require("lodash");
|
|
7
|
+
const decorators_1 = require("../../decorators");
|
|
8
|
+
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
9
|
+
class RouteDecoratorsBuilder {
|
|
10
|
+
constructor(routeType, entity, version, description, isPublic, dTOs = {}) {
|
|
11
|
+
this.routeType = routeType;
|
|
12
|
+
this.entity = entity;
|
|
13
|
+
this.version = version;
|
|
14
|
+
this.description = description;
|
|
15
|
+
this.isPublic = isPublic;
|
|
16
|
+
this.dTOs = dTOs;
|
|
17
|
+
this.responseRouteTypeIsArray = [
|
|
18
|
+
'GetMany',
|
|
19
|
+
'CreateMany',
|
|
20
|
+
'DuplicateMany',
|
|
21
|
+
];
|
|
22
|
+
this.bodyRouteTypeIsOptional = [
|
|
23
|
+
'DuplicateOne',
|
|
24
|
+
'DuplicateMany',
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
build() {
|
|
28
|
+
const [paramKey] = this.dTOs.param ? (0, lodash_1.keys)(new this.dTOs.param()) : [];
|
|
29
|
+
return [
|
|
30
|
+
...this.getRouteDecorators(paramKey),
|
|
31
|
+
...this.getApiDecorators(paramKey),
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
getRouteDecorators(paramKey) {
|
|
35
|
+
let routeDecorators = [];
|
|
36
|
+
const isAuthEnabled = dynamic_api_module_1.DynamicApiModule.state.get('isAuthEnabled');
|
|
37
|
+
if (this.isPublic) {
|
|
38
|
+
routeDecorators.push((0, decorators_1.Public)());
|
|
39
|
+
}
|
|
40
|
+
else if (isAuthEnabled) {
|
|
41
|
+
routeDecorators.push((0, swagger_1.ApiBearerAuth)());
|
|
42
|
+
}
|
|
43
|
+
switch (this.routeType) {
|
|
44
|
+
case 'GetMany':
|
|
45
|
+
routeDecorators.push((0, common_1.Get)());
|
|
46
|
+
break;
|
|
47
|
+
case 'GetOne':
|
|
48
|
+
routeDecorators.push((0, common_1.Get)(`:${paramKey}`));
|
|
49
|
+
break;
|
|
50
|
+
case 'CreateMany':
|
|
51
|
+
routeDecorators.push((0, common_1.Post)('many'));
|
|
52
|
+
break;
|
|
53
|
+
case 'CreateOne':
|
|
54
|
+
routeDecorators.push((0, common_1.Post)());
|
|
55
|
+
break;
|
|
56
|
+
case 'UpdateMany':
|
|
57
|
+
routeDecorators.push((0, common_1.Patch)());
|
|
58
|
+
break;
|
|
59
|
+
case 'UpdateOne':
|
|
60
|
+
routeDecorators.push((0, common_1.Patch)(`:${paramKey}`));
|
|
61
|
+
break;
|
|
62
|
+
case 'ReplaceOne':
|
|
63
|
+
routeDecorators.push((0, common_1.Put)(`:${paramKey}`));
|
|
64
|
+
break;
|
|
65
|
+
case 'DuplicateMany':
|
|
66
|
+
routeDecorators.push((0, common_1.Post)(`duplicate`));
|
|
67
|
+
break;
|
|
68
|
+
case 'DuplicateOne':
|
|
69
|
+
routeDecorators.push((0, common_1.Post)(`duplicate/:${paramKey}`));
|
|
70
|
+
break;
|
|
71
|
+
case 'DeleteMany':
|
|
72
|
+
routeDecorators.push((0, common_1.Delete)());
|
|
73
|
+
break;
|
|
74
|
+
case 'DeleteOne':
|
|
75
|
+
routeDecorators.push((0, common_1.Delete)(`:${paramKey}`));
|
|
76
|
+
break;
|
|
77
|
+
default:
|
|
78
|
+
throw new Error(`Unexpected route type! Cannot build route decorators. Received: ${this.routeType}`);
|
|
79
|
+
}
|
|
80
|
+
return routeDecorators;
|
|
81
|
+
}
|
|
82
|
+
getApiDecorators(paramKey) {
|
|
83
|
+
return [
|
|
84
|
+
(0, swagger_1.ApiOperation)({
|
|
85
|
+
operationId: `${(0, lodash_1.lowerFirst)(this.routeType)}${this.entity.name}${this.version ? 'V' + this.version : ''}`,
|
|
86
|
+
summary: this.description ??
|
|
87
|
+
`${(0, lodash_1.upperFirst)((0, lodash_1.lowerCase)(this.routeType))} ${(0, lodash_1.lowerCase)(this.entity.name)}`,
|
|
88
|
+
}),
|
|
89
|
+
(0, swagger_1.ApiResponse)({
|
|
90
|
+
type: this.dTOs.presenter ?? this.entity,
|
|
91
|
+
isArray: this.responseRouteTypeIsArray.includes(this.routeType),
|
|
92
|
+
}),
|
|
93
|
+
...(this.dTOs.body ? [
|
|
94
|
+
(0, swagger_1.ApiBody)({
|
|
95
|
+
type: this.dTOs.body,
|
|
96
|
+
required: !this.bodyRouteTypeIsOptional.includes(this.routeType),
|
|
97
|
+
}),
|
|
98
|
+
] : []),
|
|
99
|
+
...(this.dTOs.param && paramKey
|
|
100
|
+
? [
|
|
101
|
+
(0, swagger_1.ApiParam)({
|
|
102
|
+
type: typeof new this.dTOs.param()[paramKey],
|
|
103
|
+
name: paramKey,
|
|
104
|
+
}),
|
|
105
|
+
]
|
|
106
|
+
: []),
|
|
107
|
+
];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.RouteDecoratorsBuilder = RouteDecoratorsBuilder;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PolicyHandler } from '../interfaces';
|
|
2
|
+
import { BaseEntity } from '../models';
|
|
3
|
+
declare const CHECK_POLICIES_KEY = "check_policy";
|
|
4
|
+
declare const CheckPolicies: <Entity extends BaseEntity>(...handlers: PolicyHandler<Entity>[]) => import("@nestjs/common").CustomDecorator<string>;
|
|
5
|
+
export { CheckPolicies, CHECK_POLICIES_KEY };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CHECK_POLICIES_KEY = exports.CheckPolicies = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const CHECK_POLICIES_KEY = 'check_policy';
|
|
6
|
+
exports.CHECK_POLICIES_KEY = CHECK_POLICIES_KEY;
|
|
7
|
+
const CheckPolicies = (...handlers) => (0, common_1.SetMetadata)(CHECK_POLICIES_KEY, handlers);
|
|
8
|
+
exports.CheckPolicies = CheckPolicies;
|
package/src/decorators/index.js
CHANGED
|
@@ -14,4 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./check-policies.decorator"), exports);
|
|
18
|
+
__exportStar(require("./public.decorator"), exports);
|
|
17
19
|
__exportStar(require("./schema-options.decorator"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Public = exports.IS_PUBLIC_KEY = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const IS_PUBLIC_KEY = 'isPublic';
|
|
6
|
+
exports.IS_PUBLIC_KEY = IS_PUBLIC_KEY;
|
|
7
|
+
const Public = () => (0, common_1.SetMetadata)(IS_PUBLIC_KEY, true);
|
|
8
|
+
exports.Public = Public;
|