mongodb-dynamic-api 2.1.9 → 2.2.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/package.json +1 -1
  3. package/src/decorators/index.d.ts +1 -0
  4. package/src/decorators/index.js +1 -0
  5. package/src/decorators/validator-pipe.decorator.d.ts +3 -0
  6. package/src/decorators/validator-pipe.decorator.js +8 -0
  7. package/src/dynamic-api.module.d.ts +2 -2
  8. package/src/dynamic-api.module.js +26 -32
  9. package/src/helpers/schema.helper.js +2 -3
  10. package/src/interfaces/dynamic-api-controller-options.interface.d.ts +2 -0
  11. package/src/interfaces/dynamic-api-global-state.interface.d.ts +35 -3
  12. package/src/interfaces/dynamic-api-options.interface.d.ts +4 -2
  13. package/src/interfaces/dynamic-api-route-config.interface.d.ts +2 -0
  14. package/src/interfaces/dynamic-api-service-callback.interface.d.ts +28 -0
  15. package/src/interfaces/dynamic-api-service-callback.interface.js +2 -0
  16. package/src/interfaces/index.d.ts +1 -0
  17. package/src/interfaces/index.js +1 -0
  18. package/src/modules/auth/auth.helper.d.ts +4 -4
  19. package/src/modules/auth/auth.helper.js +6 -5
  20. package/src/modules/auth/auth.module.d.ts +1 -1
  21. package/src/modules/auth/auth.module.js +3 -3
  22. package/src/modules/auth/interfaces/auth-options.interface.d.ts +22 -14
  23. package/src/modules/auth/services/base-auth.service.d.ts +4 -3
  24. package/src/modules/auth/services/base-auth.service.js +16 -5
  25. package/src/routes/create-many/base-create-many.service.d.ts +2 -0
  26. package/src/routes/create-many/base-create-many.service.js +7 -2
  27. package/src/routes/create-many/create-many.helper.d.ts +2 -2
  28. package/src/routes/create-many/create-many.helper.js +3 -2
  29. package/src/routes/create-many/create-many.module.js +1 -1
  30. package/src/routes/create-one/base-create-one.service.d.ts +2 -0
  31. package/src/routes/create-one/base-create-one.service.js +3 -1
  32. package/src/routes/create-one/create-one.helper.d.ts +2 -2
  33. package/src/routes/create-one/create-one.helper.js +3 -2
  34. package/src/routes/create-one/create-one.module.js +1 -1
  35. package/src/routes/delete-many/delete-many.helper.js +2 -1
  36. package/src/routes/delete-one/delete-one.helper.js +2 -1
  37. package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +2 -0
  38. package/src/routes/duplicate-many/base-duplicate-many.service.js +3 -1
  39. package/src/routes/duplicate-many/duplicate-many.helper.d.ts +2 -2
  40. package/src/routes/duplicate-many/duplicate-many.helper.js +4 -2
  41. package/src/routes/duplicate-many/duplicate-many.module.js +1 -1
  42. package/src/routes/duplicate-one/base-duplicate-one.service.d.ts +2 -0
  43. package/src/routes/duplicate-one/base-duplicate-one.service.js +3 -1
  44. package/src/routes/duplicate-one/duplicate-one.helper.d.ts +2 -2
  45. package/src/routes/duplicate-one/duplicate-one.helper.js +4 -2
  46. package/src/routes/duplicate-one/duplicate-one.module.js +1 -1
  47. package/src/routes/get-many/base-get-many.service.d.ts +2 -0
  48. package/src/routes/get-many/base-get-many.service.js +3 -0
  49. package/src/routes/get-many/get-many.helper.d.ts +2 -2
  50. package/src/routes/get-many/get-many.helper.js +4 -2
  51. package/src/routes/get-many/get-many.module.js +1 -1
  52. package/src/routes/get-one/base-get-one.service.d.ts +2 -0
  53. package/src/routes/get-one/base-get-one.service.js +3 -0
  54. package/src/routes/get-one/get-one.helper.d.ts +2 -2
  55. package/src/routes/get-one/get-one.helper.js +4 -2
  56. package/src/routes/get-one/get-one.module.js +1 -1
  57. package/src/routes/replace-one/base-replace-one.service.d.ts +2 -0
  58. package/src/routes/replace-one/base-replace-one.service.js +3 -1
  59. package/src/routes/replace-one/replace-one.helper.d.ts +2 -2
  60. package/src/routes/replace-one/replace-one.helper.js +4 -2
  61. package/src/routes/replace-one/replace-one.module.js +1 -1
  62. package/src/routes/update-many/base-update-many.service.d.ts +2 -0
  63. package/src/routes/update-many/base-update-many.service.js +3 -1
  64. package/src/routes/update-many/update-many.helper.d.ts +2 -2
  65. package/src/routes/update-many/update-many.helper.js +4 -2
  66. package/src/routes/update-many/update-many.module.js +1 -1
  67. package/src/routes/update-one/base-update-one.service.d.ts +2 -0
  68. package/src/routes/update-one/base-update-one.service.js +3 -1
  69. package/src/routes/update-one/update-one.helper.d.ts +2 -2
  70. package/src/routes/update-one/update-one.helper.js +4 -2
  71. package/src/routes/update-one/update-one.module.js +1 -1
  72. package/src/services/base/base.service.js +3 -1
  73. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +30 -1
  74. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +37 -4
  75. package/src/version.json +1 -1
  76. package/tsconfig.tsbuildinfo +1 -1
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_create_many_service_1 = require("./base-create-many.service");
@@ -24,7 +25,7 @@ const create_many_controller_mixin_1 = require("./create-many-controller.mixin")
24
25
  function provideServiceName(entityName, version) {
25
26
  return `${(0, helpers_1.getNamePrefix)('CreateMany', entityName, version)}Service`;
26
27
  }
27
- function createCreateManyServiceProvider(entity, version) {
28
+ function createCreateManyServiceProvider(entity, version, callback) {
28
29
  let CreateManyService = class CreateManyService extends base_create_many_service_1.BaseCreateManyService {
29
30
  constructor(model) {
30
31
  super(model);
@@ -57,7 +58,7 @@ function createCreateManyController(entity, controllerOptions, routeConfig, vers
57
58
  CreateManyController = __decorate([
58
59
  (0, common_1.Controller)({ path, version }),
59
60
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
61
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
62
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
63
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
64
  __metadata("design:paramtypes", [Object])
@@ -13,7 +13,7 @@ const create_many_helper_1 = require("./create-many.helper");
13
13
  let CreateManyModule = CreateManyModule_1 = class CreateManyModule {
14
14
  static async forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions) {
15
15
  const controller = (0, create_many_helper_1.createCreateManyController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
16
- const ServiceProvider = (0, create_many_helper_1.createCreateManyServiceProvider)(entity, version);
16
+ const ServiceProvider = (0, create_many_helper_1.createCreateManyServiceProvider)(entity, version, routeConfig.callback);
17
17
  return {
18
18
  module: CreateManyModule_1,
19
19
  imports: [databaseModule],
@@ -23,11 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Model } from 'mongoose';
26
+ import { DynamicApiServiceCallback } from '../../interfaces';
26
27
  import { BaseEntity } from '../../models';
27
28
  import { BaseService } from '../../services';
28
29
  import { CreateOneService } from './create-one-service.interface';
29
30
  export declare abstract class BaseCreateOneService<Entity extends BaseEntity> extends BaseService<Entity> implements CreateOneService<Entity> {
30
31
  protected readonly model: Model<Entity>;
32
+ protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
31
33
  protected constructor(model: Model<Entity>);
32
34
  createOne(partial: Partial<Entity>): Promise<Entity>;
33
35
  }
@@ -11,11 +11,13 @@ class BaseCreateOneService extends services_1.BaseService {
11
11
  try {
12
12
  const { _id } = await this.model.create(partial);
13
13
  const document = await this.model.findOne({ _id }).lean().exec();
14
+ if (this.callback) {
15
+ await this.callback(document, this.model);
16
+ }
14
17
  return this.buildInstance(document);
15
18
  }
16
19
  catch (error) {
17
20
  this.handleDuplicateKeyError(error);
18
- throw error;
19
21
  }
20
22
  }
21
23
  }
@@ -1,7 +1,7 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
2
+ import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  import { CreateOneControllerConstructor } from './create-one-controller.interface';
5
- declare function createCreateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createCreateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createCreateOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): CreateOneControllerConstructor<Entity>;
7
7
  export { createCreateOneController, createCreateOneServiceProvider };
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_create_one_service_1 = require("./base-create-one.service");
@@ -24,7 +25,7 @@ const create_one_controller_mixin_1 = require("./create-one-controller.mixin");
24
25
  function provideServiceName(entityName, version) {
25
26
  return `${(0, helpers_1.getNamePrefix)('CreateOne', entityName, version)}Service`;
26
27
  }
27
- function createCreateOneServiceProvider(entity, version) {
28
+ function createCreateOneServiceProvider(entity, version, callback) {
28
29
  let CreateOneService = class CreateOneService extends base_create_one_service_1.BaseCreateOneService {
29
30
  constructor(model) {
30
31
  super(model);
@@ -57,7 +58,7 @@ function createCreateOneController(entity, controllerOptions, routeConfig, versi
57
58
  CreateOneController = __decorate([
58
59
  (0, common_1.Controller)({ path, version }),
59
60
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
61
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
62
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
63
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
64
  __metadata("design:paramtypes", [Object])
@@ -13,7 +13,7 @@ const create_one_helper_1 = require("./create-one.helper");
13
13
  let CreateOneModule = CreateOneModule_1 = class CreateOneModule {
14
14
  static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
15
15
  const controller = (0, create_one_helper_1.createCreateOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
16
- const ServiceProvider = (0, create_one_helper_1.createCreateOneServiceProvider)(entity, version);
16
+ const ServiceProvider = (0, create_one_helper_1.createCreateOneServiceProvider)(entity, version, routeConfig.callback);
17
17
  return {
18
18
  module: CreateOneModule_1,
19
19
  imports: [databaseModule],
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_delete_many_service_1 = require("./base-delete-many.service");
@@ -57,7 +58,7 @@ function createDeleteManyController(entity, controllerOptions, routeConfig, vers
57
58
  DeleteManyController = __decorate([
58
59
  (0, common_1.Controller)({ path, version }),
59
60
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
61
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
62
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
63
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
64
  __metadata("design:paramtypes", [Object])
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_delete_one_service_1 = require("./base-delete-one.service");
@@ -57,7 +58,7 @@ function createDeleteOneController(entity, controllerOptions, routeConfig, versi
57
58
  DeleteOneController = __decorate([
58
59
  (0, common_1.Controller)({ path, version }),
59
60
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
61
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
62
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
63
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
64
  __metadata("design:paramtypes", [Object])
@@ -23,11 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Model } from 'mongoose';
26
+ import { DynamicApiServiceCallback } from '../../interfaces';
26
27
  import { BaseEntity } from '../../models';
27
28
  import { BaseService } from '../../services';
28
29
  import { DuplicateManyService } from './duplicate-many-service.interface';
29
30
  export declare abstract class BaseDuplicateManyService<Entity extends BaseEntity> extends BaseService<Entity> implements DuplicateManyService<Entity> {
30
31
  protected readonly model: Model<Entity>;
32
+ protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
31
33
  protected constructor(model: Model<Entity>);
32
34
  duplicateMany(ids: string[], partial: Partial<Entity> | undefined): Promise<Entity[]>;
33
35
  }
@@ -32,11 +32,13 @@ class BaseDuplicateManyService extends services_1.BaseService {
32
32
  const documents = await this.model.find({ _id: { $in: duplicatedList.map(({ _id }) => _id.toString()) } })
33
33
  .lean()
34
34
  .exec();
35
+ if (this.callback && documents.length) {
36
+ await Promise.all(documents.map((document) => this.callback(document, this.model)));
37
+ }
35
38
  return documents.map((d) => this.buildInstance(d));
36
39
  }
37
40
  catch (error) {
38
41
  this.handleDuplicateKeyError(error);
39
- throw error;
40
42
  }
41
43
  }
42
44
  }
@@ -1,7 +1,7 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
2
+ import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  import { DuplicateManyControllerConstructor } from './duplicate-many-controller.interface';
5
- declare function createDuplicateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createDuplicateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createDuplicateManyController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): DuplicateManyControllerConstructor<Entity>;
7
7
  export { createDuplicateManyController, createDuplicateManyServiceProvider };
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_duplicate_many_service_1 = require("./base-duplicate-many.service");
@@ -24,12 +25,13 @@ const duplicate_many_controller_mixin_1 = require("./duplicate-many-controller.m
24
25
  function provideServiceName(entityName, version) {
25
26
  return `${(0, helpers_1.getNamePrefix)('DuplicateMany', entityName, version)}Service`;
26
27
  }
27
- function createDuplicateManyServiceProvider(entity, version) {
28
+ function createDuplicateManyServiceProvider(entity, version, callback) {
28
29
  let DuplicateManyService = class DuplicateManyService extends base_duplicate_many_service_1.BaseDuplicateManyService {
29
30
  constructor(model) {
30
31
  super(model);
31
32
  this.model = model;
32
33
  this.entity = entity;
34
+ this.callback = callback;
33
35
  }
34
36
  };
35
37
  DuplicateManyService = __decorate([
@@ -57,7 +59,7 @@ function createDuplicateManyController(entity, controllerOptions, routeConfig, v
57
59
  DuplicateManyController = __decorate([
58
60
  (0, common_1.Controller)({ path, version }),
59
61
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
62
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
63
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
64
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
65
  __metadata("design:paramtypes", [Object])
@@ -13,7 +13,7 @@ const duplicate_many_helper_1 = require("./duplicate-many.helper");
13
13
  let DuplicateManyModule = DuplicateManyModule_1 = class DuplicateManyModule {
14
14
  static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
15
15
  const controller = (0, duplicate_many_helper_1.createDuplicateManyController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
16
- const ServiceProvider = (0, duplicate_many_helper_1.createDuplicateManyServiceProvider)(entity, version);
16
+ const ServiceProvider = (0, duplicate_many_helper_1.createDuplicateManyServiceProvider)(entity, version, routeConfig.callback);
17
17
  return {
18
18
  module: DuplicateManyModule_1,
19
19
  imports: [databaseModule],
@@ -23,11 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Model } from 'mongoose';
26
+ import { DynamicApiServiceCallback } from '../../interfaces';
26
27
  import { BaseEntity } from '../../models';
27
28
  import { BaseService } from '../../services';
28
29
  import { DuplicateOneService } from './duplicate-one-service.interface';
29
30
  export declare abstract class BaseDuplicateOneService<Entity extends BaseEntity> extends BaseService<Entity> implements DuplicateOneService<Entity> {
30
31
  protected readonly model: Model<Entity>;
32
+ protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
31
33
  protected constructor(model: Model<Entity>);
32
34
  duplicateOne(id: string, partial: Partial<Entity> | undefined): Promise<Entity>;
33
35
  }
@@ -30,11 +30,13 @@ class BaseDuplicateOneService extends services_1.BaseService {
30
30
  ...partial,
31
31
  });
32
32
  const document = await this.model.findOne({ _id }).lean().exec();
33
+ if (this.callback) {
34
+ await this.callback(document, this.model);
35
+ }
33
36
  return this.buildInstance(document);
34
37
  }
35
38
  catch (error) {
36
39
  this.handleDuplicateKeyError(error);
37
- throw error;
38
40
  }
39
41
  }
40
42
  }
@@ -1,7 +1,7 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
2
+ import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  import { DuplicateOneControllerConstructor } from './duplicate-one-controller.interface';
5
- declare function createDuplicateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createDuplicateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createDuplicateOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): DuplicateOneControllerConstructor<Entity>;
7
7
  export { createDuplicateOneController, createDuplicateOneServiceProvider };
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_duplicate_one_service_1 = require("./base-duplicate-one.service");
@@ -24,12 +25,13 @@ const duplicate_one_controller_mixin_1 = require("./duplicate-one-controller.mix
24
25
  function provideServiceName(entityName, version) {
25
26
  return `${(0, helpers_1.getNamePrefix)('DuplicateOne', entityName, version)}Service`;
26
27
  }
27
- function createDuplicateOneServiceProvider(entity, version) {
28
+ function createDuplicateOneServiceProvider(entity, version, callback) {
28
29
  let DuplicateOneService = class DuplicateOneService extends base_duplicate_one_service_1.BaseDuplicateOneService {
29
30
  constructor(model) {
30
31
  super(model);
31
32
  this.model = model;
32
33
  this.entity = entity;
34
+ this.callback = callback;
33
35
  }
34
36
  };
35
37
  DuplicateOneService = __decorate([
@@ -57,7 +59,7 @@ function createDuplicateOneController(entity, controllerOptions, routeConfig, ve
57
59
  DuplicateOneController = __decorate([
58
60
  (0, common_1.Controller)({ path, version }),
59
61
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
62
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
63
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
64
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
65
  __metadata("design:paramtypes", [Object])
@@ -13,7 +13,7 @@ const duplicate_one_helper_1 = require("./duplicate-one.helper");
13
13
  let DuplicateOneModule = DuplicateOneModule_1 = class DuplicateOneModule {
14
14
  static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
15
15
  const controller = (0, duplicate_one_helper_1.createDuplicateOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
16
- const ServiceProvider = (0, duplicate_one_helper_1.createDuplicateOneServiceProvider)(entity, version);
16
+ const ServiceProvider = (0, duplicate_one_helper_1.createDuplicateOneServiceProvider)(entity, version, routeConfig.callback);
17
17
  return {
18
18
  module: DuplicateOneModule_1,
19
19
  imports: [databaseModule],
@@ -23,11 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Model } from 'mongoose';
26
+ import { DynamicApiServiceCallback } from '../../interfaces';
26
27
  import { BaseEntity } from '../../models';
27
28
  import { BaseService } from '../../services';
28
29
  import { GetManyService } from './get-many-service.interface';
29
30
  export declare abstract class BaseGetManyService<Entity extends BaseEntity> extends BaseService<Entity> implements GetManyService<Entity> {
30
31
  protected readonly model: Model<Entity>;
32
+ protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
31
33
  protected constructor(model: Model<Entity>);
32
34
  getMany(query?: object): Promise<Entity[]>;
33
35
  }
@@ -15,6 +15,9 @@ class BaseGetManyService extends services_1.BaseService {
15
15
  })
16
16
  .lean()
17
17
  .exec();
18
+ if (this.callback && documents.length) {
19
+ await Promise.all(documents.map((document) => this.callback(document, this.model)));
20
+ }
18
21
  return documents.map((d) => this.buildInstance(d));
19
22
  }
20
23
  }
@@ -1,7 +1,7 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
2
+ import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  import { GetManyControllerConstructor } from './get-many-controller.interface';
5
- declare function createGetManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createGetManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createGetManyController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): GetManyControllerConstructor<Entity>;
7
7
  export { createGetManyController, createGetManyServiceProvider };
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_get_many_service_1 = require("./base-get-many.service");
@@ -24,12 +25,13 @@ const get_many_controller_mixin_1 = require("./get-many-controller.mixin");
24
25
  function provideServiceName(entityName, version) {
25
26
  return `${(0, helpers_1.getNamePrefix)('GetMany', entityName, version)}Service`;
26
27
  }
27
- function createGetManyServiceProvider(entity, version) {
28
+ function createGetManyServiceProvider(entity, version, callback) {
28
29
  let GetManyService = class GetManyService extends base_get_many_service_1.BaseGetManyService {
29
30
  constructor(model) {
30
31
  super(model);
31
32
  this.model = model;
32
33
  this.entity = entity;
34
+ this.callback = callback;
33
35
  }
34
36
  };
35
37
  GetManyService = __decorate([
@@ -57,7 +59,7 @@ function createGetManyController(entity, controllerOptions, routeConfig, version
57
59
  GetManyController = __decorate([
58
60
  (0, common_1.Controller)({ path, version }),
59
61
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
62
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
63
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
64
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
65
  __metadata("design:paramtypes", [Object])
@@ -13,7 +13,7 @@ const get_many_helper_1 = require("./get-many.helper");
13
13
  let GetManyModule = GetManyModule_1 = class GetManyModule {
14
14
  static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
15
15
  const controller = (0, get_many_helper_1.createGetManyController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
16
- const ServiceProvider = (0, get_many_helper_1.createGetManyServiceProvider)(entity, version);
16
+ const ServiceProvider = (0, get_many_helper_1.createGetManyServiceProvider)(entity, version, routeConfig.callback);
17
17
  return {
18
18
  module: GetManyModule_1,
19
19
  imports: [databaseModule],
@@ -23,11 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Model } from 'mongoose';
26
+ import { DynamicApiServiceCallback } from '../../interfaces';
26
27
  import { BaseEntity } from '../../models';
27
28
  import { BaseService } from '../../services';
28
29
  import { GetOneService } from './get-one-service.interface';
29
30
  export declare abstract class BaseGetOneService<Entity extends BaseEntity> extends BaseService<Entity> implements GetOneService<Entity> {
30
31
  protected readonly model: Model<Entity>;
32
+ protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
31
33
  protected constructor(model: Model<Entity>);
32
34
  getOne(id: string): Promise<Entity>;
33
35
  }
@@ -18,6 +18,9 @@ class BaseGetOneService extends services_1.BaseService {
18
18
  if (!document) {
19
19
  this.handleDocumentNotFound();
20
20
  }
21
+ if (this.callback) {
22
+ await this.callback(document, this.model);
23
+ }
21
24
  return this.buildInstance(document);
22
25
  }
23
26
  }
@@ -1,7 +1,7 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
2
+ import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  import { GetOneControllerConstructor } from './get-one-controller.interface';
5
- declare function createGetOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createGetOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createGetOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): GetOneControllerConstructor<Entity>;
7
7
  export { createGetOneController, createGetOneServiceProvider };
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_get_one_service_1 = require("./base-get-one.service");
@@ -24,12 +25,13 @@ const get_one_controller_mixin_1 = require("./get-one-controller.mixin");
24
25
  function provideServiceName(entityName, version) {
25
26
  return `${(0, helpers_1.getNamePrefix)('GetOne', entityName, version)}Service`;
26
27
  }
27
- function createGetOneServiceProvider(entity, version) {
28
+ function createGetOneServiceProvider(entity, version, callback) {
28
29
  let GetOneService = class GetOneService extends base_get_one_service_1.BaseGetOneService {
29
30
  constructor(model) {
30
31
  super(model);
31
32
  this.model = model;
32
33
  this.entity = entity;
34
+ this.callback = callback;
33
35
  }
34
36
  };
35
37
  GetOneService = __decorate([
@@ -57,7 +59,7 @@ function createGetOneController(entity, controllerOptions, routeConfig, version,
57
59
  GetOneController = __decorate([
58
60
  (0, common_1.Controller)({ path, version }),
59
61
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
62
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
63
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
64
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
65
  __metadata("design:paramtypes", [Object])
@@ -13,7 +13,7 @@ const get_one_helper_1 = require("./get-one.helper");
13
13
  let GetOneModule = GetOneModule_1 = class GetOneModule {
14
14
  static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
15
15
  const controller = (0, get_one_helper_1.createGetOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
16
- const ServiceProvider = (0, get_one_helper_1.createGetOneServiceProvider)(entity, version);
16
+ const ServiceProvider = (0, get_one_helper_1.createGetOneServiceProvider)(entity, version, routeConfig.callback);
17
17
  return {
18
18
  module: GetOneModule_1,
19
19
  imports: [databaseModule],
@@ -23,11 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Model } from 'mongoose';
26
+ import { DynamicApiServiceCallback } from '../../interfaces';
26
27
  import { BaseEntity } from '../../models';
27
28
  import { BaseService } from '../../services';
28
29
  import { ReplaceOneService } from './replace-one-service.interface';
29
30
  export declare abstract class BaseReplaceOneService<Entity extends BaseEntity> extends BaseService<Entity> implements ReplaceOneService<Entity> {
30
31
  protected readonly model: Model<Entity>;
32
+ protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
31
33
  protected constructor(model: Model<Entity>);
32
34
  replaceOne(id: string, partial: Partial<Entity>): Promise<Entity>;
33
35
  }
@@ -22,11 +22,13 @@ class BaseReplaceOneService extends services_1.BaseService {
22
22
  if (!document) {
23
23
  this.handleDocumentNotFound();
24
24
  }
25
+ if (this.callback) {
26
+ await this.callback(document, this.model);
27
+ }
25
28
  return this.buildInstance(document);
26
29
  }
27
30
  catch (error) {
28
31
  this.handleDuplicateKeyError(error);
29
- throw error;
30
32
  }
31
33
  }
32
34
  }
@@ -1,7 +1,7 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
2
+ import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  import { ReplaceOneControllerConstructor } from './replace-one-controller.interface';
5
- declare function createReplaceOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createReplaceOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createReplaceOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): ReplaceOneControllerConstructor<Entity>;
7
7
  export { createReplaceOneController, createReplaceOneServiceProvider };
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
17
17
  const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
+ const decorators_1 = require("../../decorators");
20
21
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
22
  const helpers_1 = require("../../helpers");
22
23
  const base_replace_one_service_1 = require("./base-replace-one.service");
@@ -24,12 +25,13 @@ const replace_one_controller_mixin_1 = require("./replace-one-controller.mixin")
24
25
  function provideServiceName(entityName, version) {
25
26
  return `${(0, helpers_1.getNamePrefix)('ReplaceOne', entityName, version)}Service`;
26
27
  }
27
- function createReplaceOneServiceProvider(entity, version) {
28
+ function createReplaceOneServiceProvider(entity, version, callback) {
28
29
  let ReplaceOneService = class ReplaceOneService extends base_replace_one_service_1.BaseReplaceOneService {
29
30
  constructor(model) {
30
31
  super(model);
31
32
  this.model = model;
32
33
  this.entity = entity;
34
+ this.callback = callback;
33
35
  }
34
36
  };
35
37
  ReplaceOneService = __decorate([
@@ -57,7 +59,7 @@ function createReplaceOneController(entity, controllerOptions, routeConfig, vers
57
59
  ReplaceOneController = __decorate([
58
60
  (0, common_1.Controller)({ path, version }),
59
61
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
62
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
63
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
64
  __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
63
65
  __metadata("design:paramtypes", [Object])
@@ -13,7 +13,7 @@ const replace_one_helper_1 = require("./replace-one.helper");
13
13
  let ReplaceOneModule = ReplaceOneModule_1 = class ReplaceOneModule {
14
14
  static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
15
15
  const controller = (0, replace_one_helper_1.createReplaceOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
16
- const ServiceProvider = (0, replace_one_helper_1.createReplaceOneServiceProvider)(entity, version);
16
+ const ServiceProvider = (0, replace_one_helper_1.createReplaceOneServiceProvider)(entity, version, routeConfig.callback);
17
17
  return {
18
18
  module: ReplaceOneModule_1,
19
19
  imports: [databaseModule],
@@ -23,11 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import { Model } from 'mongoose';
26
+ import { DynamicApiServiceCallback } from '../../interfaces';
26
27
  import { BaseEntity } from '../../models';
27
28
  import { BaseService } from '../../services';
28
29
  import { UpdateManyService } from './update-many-service.interface';
29
30
  export declare abstract class BaseUpdateManyService<Entity extends BaseEntity> extends BaseService<Entity> implements UpdateManyService<Entity> {
30
31
  protected readonly model: Model<Entity>;
32
+ protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
31
33
  protected constructor(model: Model<Entity>);
32
34
  updateMany(ids: string[], partial: Partial<Entity>): Promise<Entity[]>;
33
35
  }
@@ -21,11 +21,13 @@ class BaseUpdateManyService extends services_1.BaseService {
21
21
  .lean()
22
22
  .exec();
23
23
  const documents = await this.model.find({ _id: { $in: ids } }).lean().exec();
24
+ if (this.callback && documents.length) {
25
+ await Promise.all(documents.map((document) => this.callback(document, this.model)));
26
+ }
24
27
  return documents.map((d) => this.buildInstance(d));
25
28
  }
26
29
  catch (error) {
27
30
  this.handleDuplicateKeyError(error);
28
- throw error;
29
31
  }
30
32
  }
31
33
  }
@@ -1,7 +1,7 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
2
+ import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  import { UpdateManyControllerConstructor } from './update-many-controller.interface';
5
- declare function createUpdateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createUpdateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createUpdateManyController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): UpdateManyControllerConstructor<Entity>;
7
7
  export { createUpdateManyController, createUpdateManyServiceProvider };