mongodb-dynamic-api 2.1.10 → 2.2.1

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 (79) 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/format.helper.d.ts +2 -2
  10. package/src/helpers/format.helper.js +5 -2
  11. package/src/helpers/schema.helper.js +2 -3
  12. package/src/interfaces/dynamic-api-controller-options.interface.d.ts +2 -0
  13. package/src/interfaces/dynamic-api-global-state.interface.d.ts +35 -3
  14. package/src/interfaces/dynamic-api-options.interface.d.ts +4 -2
  15. package/src/interfaces/dynamic-api-route-config.interface.d.ts +2 -0
  16. package/src/interfaces/dynamic-api-service-callback.interface.d.ts +28 -0
  17. package/src/interfaces/dynamic-api-service-callback.interface.js +2 -0
  18. package/src/interfaces/index.d.ts +1 -0
  19. package/src/interfaces/index.js +1 -0
  20. package/src/mixins/create-policies-guard.mixin.js +2 -2
  21. package/src/modules/auth/auth.helper.d.ts +4 -4
  22. package/src/modules/auth/auth.helper.js +6 -5
  23. package/src/modules/auth/auth.module.d.ts +1 -1
  24. package/src/modules/auth/auth.module.js +3 -3
  25. package/src/modules/auth/interfaces/auth-options.interface.d.ts +22 -14
  26. package/src/modules/auth/services/base-auth.service.d.ts +4 -3
  27. package/src/modules/auth/services/base-auth.service.js +16 -5
  28. package/src/routes/create-many/base-create-many.service.d.ts +2 -0
  29. package/src/routes/create-many/base-create-many.service.js +7 -2
  30. package/src/routes/create-many/create-many.helper.d.ts +2 -2
  31. package/src/routes/create-many/create-many.helper.js +7 -9
  32. package/src/routes/create-many/create-many.module.js +1 -1
  33. package/src/routes/create-one/base-create-one.service.d.ts +2 -0
  34. package/src/routes/create-one/base-create-one.service.js +3 -1
  35. package/src/routes/create-one/create-one.helper.d.ts +2 -2
  36. package/src/routes/create-one/create-one.helper.js +7 -9
  37. package/src/routes/create-one/create-one.module.js +1 -1
  38. package/src/routes/delete-many/delete-many.helper.js +6 -8
  39. package/src/routes/delete-one/delete-one.helper.js +6 -8
  40. package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +2 -0
  41. package/src/routes/duplicate-many/base-duplicate-many.service.js +3 -1
  42. package/src/routes/duplicate-many/duplicate-many.helper.d.ts +2 -2
  43. package/src/routes/duplicate-many/duplicate-many.helper.js +8 -9
  44. package/src/routes/duplicate-many/duplicate-many.module.js +1 -1
  45. package/src/routes/duplicate-one/base-duplicate-one.service.d.ts +2 -0
  46. package/src/routes/duplicate-one/base-duplicate-one.service.js +3 -1
  47. package/src/routes/duplicate-one/duplicate-one.helper.d.ts +2 -2
  48. package/src/routes/duplicate-one/duplicate-one.helper.js +8 -9
  49. package/src/routes/duplicate-one/duplicate-one.module.js +1 -1
  50. package/src/routes/get-many/base-get-many.service.d.ts +2 -0
  51. package/src/routes/get-many/base-get-many.service.js +3 -0
  52. package/src/routes/get-many/get-many.helper.d.ts +2 -2
  53. package/src/routes/get-many/get-many.helper.js +8 -9
  54. package/src/routes/get-many/get-many.module.js +1 -1
  55. package/src/routes/get-one/base-get-one.service.d.ts +2 -0
  56. package/src/routes/get-one/base-get-one.service.js +3 -0
  57. package/src/routes/get-one/get-one.helper.d.ts +2 -2
  58. package/src/routes/get-one/get-one.helper.js +8 -9
  59. package/src/routes/get-one/get-one.module.js +1 -1
  60. package/src/routes/replace-one/base-replace-one.service.d.ts +2 -0
  61. package/src/routes/replace-one/base-replace-one.service.js +3 -1
  62. package/src/routes/replace-one/replace-one.helper.d.ts +2 -2
  63. package/src/routes/replace-one/replace-one.helper.js +8 -9
  64. package/src/routes/replace-one/replace-one.module.js +1 -1
  65. package/src/routes/update-many/base-update-many.service.d.ts +2 -0
  66. package/src/routes/update-many/base-update-many.service.js +3 -1
  67. package/src/routes/update-many/update-many.helper.d.ts +2 -2
  68. package/src/routes/update-many/update-many.helper.js +8 -9
  69. package/src/routes/update-many/update-many.module.js +1 -1
  70. package/src/routes/update-one/base-update-one.service.d.ts +2 -0
  71. package/src/routes/update-one/base-update-one.service.js +3 -1
  72. package/src/routes/update-one/update-one.helper.d.ts +2 -2
  73. package/src/routes/update-one/update-one.helper.js +8 -9
  74. package/src/routes/update-one/update-one.module.js +1 -1
  75. package/src/services/base/base.service.js +3 -1
  76. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +30 -1
  77. package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +37 -4
  78. package/src/version.json +1 -1
  79. package/tsconfig.tsbuildinfo +1 -1
@@ -10,12 +10,17 @@ class BaseCreateManyService extends services_1.BaseService {
10
10
  async createMany(partials) {
11
11
  try {
12
12
  const created = await this.model.create(partials);
13
- const documents = await this.model.find({ _id: { $in: created.map(({ _id }) => _id.toString()) } }).lean().exec();
13
+ const documents = await this.model
14
+ .find({ _id: { $in: created.map(({ _id }) => _id.toString()) } })
15
+ .lean()
16
+ .exec();
17
+ if (this.callback && documents.length) {
18
+ await Promise.all(documents.map((document) => this.callback(document, this.model)));
19
+ }
14
20
  return documents.map((d) => this.buildInstance(d));
15
21
  }
16
22
  catch (error) {
17
23
  this.handleDuplicateKeyError(error);
18
- throw error;
19
24
  }
20
25
  }
21
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 { CreateManyControllerConstructor } from './create-many-controller.interface';
5
- declare function createCreateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
5
+ declare function createCreateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
6
6
  declare function createCreateManyController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): CreateManyControllerConstructor<Entity>;
7
7
  export { createCreateManyController, createCreateManyServiceProvider };
@@ -17,14 +17,12 @@ 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");
23
24
  const create_many_controller_mixin_1 = require("./create-many-controller.mixin");
24
- function provideServiceName(entityName, version) {
25
- return `${(0, helpers_1.getNamePrefix)('CreateMany', entityName, version)}Service`;
26
- }
27
- function createCreateManyServiceProvider(entity, version) {
25
+ function createCreateManyServiceProvider(entity, version, callback) {
28
26
  let CreateManyService = class CreateManyService extends base_create_many_service_1.BaseCreateManyService {
29
27
  constructor(model) {
30
28
  super(model);
@@ -37,11 +35,11 @@ function createCreateManyServiceProvider(entity, version) {
37
35
  __metadata("design:paramtypes", [mongoose_2.Model])
38
36
  ], CreateManyService);
39
37
  Object.defineProperty(CreateManyService, 'name', {
40
- value: provideServiceName(entity.name, version),
38
+ value: (0, helpers_1.provideName)('CreateMany', entity.name, version, 'Service'),
41
39
  writable: false,
42
40
  });
43
41
  return {
44
- provide: provideServiceName(entity.name, version),
42
+ provide: (0, helpers_1.provideName)('CreateMany', entity.name, version, 'Service'),
45
43
  useClass: CreateManyService,
46
44
  };
47
45
  }
@@ -57,13 +55,13 @@ function createCreateManyController(entity, controllerOptions, routeConfig, vers
57
55
  CreateManyController = __decorate([
58
56
  (0, common_1.Controller)({ path, version }),
59
57
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
58
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
59
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
60
+ __param(0, (0, common_1.Inject)((0, helpers_1.provideName)('CreateMany', entity.name, version, 'Service'))),
63
61
  __metadata("design:paramtypes", [Object])
64
62
  ], CreateManyController);
65
63
  Object.defineProperty(CreateManyController, 'name', {
66
- value: `${(0, helpers_1.getNamePrefix)('CreateMany', entity.name, version)}Controller`,
64
+ value: `${(0, helpers_1.provideName)('CreateMany', entity.name, version, 'Controller')}`,
67
65
  writable: false,
68
66
  });
69
67
  return CreateManyController;
@@ -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,14 +17,12 @@ 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");
23
24
  const create_one_controller_mixin_1 = require("./create-one-controller.mixin");
24
- function provideServiceName(entityName, version) {
25
- return `${(0, helpers_1.getNamePrefix)('CreateOne', entityName, version)}Service`;
26
- }
27
- function createCreateOneServiceProvider(entity, version) {
25
+ function createCreateOneServiceProvider(entity, version, callback) {
28
26
  let CreateOneService = class CreateOneService extends base_create_one_service_1.BaseCreateOneService {
29
27
  constructor(model) {
30
28
  super(model);
@@ -37,11 +35,11 @@ function createCreateOneServiceProvider(entity, version) {
37
35
  __metadata("design:paramtypes", [mongoose_2.Model])
38
36
  ], CreateOneService);
39
37
  Object.defineProperty(CreateOneService, 'name', {
40
- value: provideServiceName(entity.name, version),
38
+ value: (0, helpers_1.provideName)('CreateOne', entity.name, version, 'Service'),
41
39
  writable: false,
42
40
  });
43
41
  return {
44
- provide: provideServiceName(entity.name, version),
42
+ provide: (0, helpers_1.provideName)('CreateOne', entity.name, version, 'Service'),
45
43
  useClass: CreateOneService,
46
44
  };
47
45
  }
@@ -57,13 +55,13 @@ function createCreateOneController(entity, controllerOptions, routeConfig, versi
57
55
  CreateOneController = __decorate([
58
56
  (0, common_1.Controller)({ path, version }),
59
57
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
58
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
59
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
60
+ __param(0, (0, common_1.Inject)((0, helpers_1.provideName)('CreateOne', entity.name, version, 'Service'))),
63
61
  __metadata("design:paramtypes", [Object])
64
62
  ], CreateOneController);
65
63
  Object.defineProperty(CreateOneController, 'name', {
66
- value: `${(0, helpers_1.getNamePrefix)('CreateOne', entity.name, version)}Controller`,
64
+ value: `${(0, helpers_1.provideName)('CreateOne', entity.name, version, 'Controller')}`,
67
65
  writable: false,
68
66
  });
69
67
  return CreateOneController;
@@ -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,13 +17,11 @@ 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");
23
24
  const delete_many_controller_mixin_1 = require("./delete-many-controller.mixin");
24
- function provideServiceName(entityName, version) {
25
- return `${(0, helpers_1.getNamePrefix)('DeleteMany', entityName, version)}Service`;
26
- }
27
25
  function createDeleteManyServiceProvider(entity, version) {
28
26
  let DeleteManyService = class DeleteManyService extends base_delete_many_service_1.BaseDeleteManyService {
29
27
  constructor(model) {
@@ -37,11 +35,11 @@ function createDeleteManyServiceProvider(entity, version) {
37
35
  __metadata("design:paramtypes", [mongoose_2.Model])
38
36
  ], DeleteManyService);
39
37
  Object.defineProperty(DeleteManyService, 'name', {
40
- value: provideServiceName(entity.name, version),
38
+ value: (0, helpers_1.provideName)('DeleteMany', entity.name, version, 'Service'),
41
39
  writable: false,
42
40
  });
43
41
  return {
44
- provide: provideServiceName(entity.name, version),
42
+ provide: (0, helpers_1.provideName)('DeleteMany', entity.name, version, 'Service'),
45
43
  useClass: DeleteManyService,
46
44
  };
47
45
  }
@@ -57,13 +55,13 @@ function createDeleteManyController(entity, controllerOptions, routeConfig, vers
57
55
  DeleteManyController = __decorate([
58
56
  (0, common_1.Controller)({ path, version }),
59
57
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
58
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
59
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
60
+ __param(0, (0, common_1.Inject)((0, helpers_1.provideName)('DeleteMany', entity.name, version, 'Service'))),
63
61
  __metadata("design:paramtypes", [Object])
64
62
  ], DeleteManyController);
65
63
  Object.defineProperty(DeleteManyController, 'name', {
66
- value: `${(0, helpers_1.getNamePrefix)('DeleteMany', entity.name, version)}Controller`,
64
+ value: `${(0, helpers_1.provideName)('DeleteMany', entity.name, version, 'Controller')}`,
67
65
  writable: false,
68
66
  });
69
67
  return DeleteManyController;
@@ -17,13 +17,11 @@ 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");
23
24
  const delete_one_controller_mixin_1 = require("./delete-one-controller.mixin");
24
- function provideServiceName(entityName, version) {
25
- return `${(0, helpers_1.getNamePrefix)('DeleteOne', entityName, version)}Service`;
26
- }
27
25
  function createDeleteOneServiceProvider(entity, version) {
28
26
  let DeleteOneService = class DeleteOneService extends base_delete_one_service_1.BaseDeleteOneService {
29
27
  constructor(model) {
@@ -37,11 +35,11 @@ function createDeleteOneServiceProvider(entity, version) {
37
35
  __metadata("design:paramtypes", [mongoose_2.Model])
38
36
  ], DeleteOneService);
39
37
  Object.defineProperty(DeleteOneService, 'name', {
40
- value: provideServiceName(entity.name, version),
38
+ value: (0, helpers_1.provideName)('DeleteOne', entity.name, version, 'Service'),
41
39
  writable: false,
42
40
  });
43
41
  return {
44
- provide: provideServiceName(entity.name, version),
42
+ provide: (0, helpers_1.provideName)('DeleteOne', entity.name, version, 'Service'),
45
43
  useClass: DeleteOneService,
46
44
  };
47
45
  }
@@ -57,13 +55,13 @@ function createDeleteOneController(entity, controllerOptions, routeConfig, versi
57
55
  DeleteOneController = __decorate([
58
56
  (0, common_1.Controller)({ path, version }),
59
57
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
58
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
59
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
60
+ __param(0, (0, common_1.Inject)((0, helpers_1.provideName)('DeleteOne', entity.name, version, 'Service'))),
63
61
  __metadata("design:paramtypes", [Object])
64
62
  ], DeleteOneController);
65
63
  Object.defineProperty(DeleteOneController, 'name', {
66
- value: `${(0, helpers_1.getNamePrefix)('DeleteOne', entity.name, version)}Controller`,
64
+ value: `${(0, helpers_1.provideName)('DeleteOne', entity.name, version, 'Controller')}`,
67
65
  writable: false,
68
66
  });
69
67
  return DeleteOneController;
@@ -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,19 +17,18 @@ 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");
23
24
  const duplicate_many_controller_mixin_1 = require("./duplicate-many-controller.mixin");
24
- function provideServiceName(entityName, version) {
25
- return `${(0, helpers_1.getNamePrefix)('DuplicateMany', entityName, version)}Service`;
26
- }
27
- function createDuplicateManyServiceProvider(entity, version) {
25
+ function createDuplicateManyServiceProvider(entity, version, callback) {
28
26
  let DuplicateManyService = class DuplicateManyService extends base_duplicate_many_service_1.BaseDuplicateManyService {
29
27
  constructor(model) {
30
28
  super(model);
31
29
  this.model = model;
32
30
  this.entity = entity;
31
+ this.callback = callback;
33
32
  }
34
33
  };
35
34
  DuplicateManyService = __decorate([
@@ -37,11 +36,11 @@ function createDuplicateManyServiceProvider(entity, version) {
37
36
  __metadata("design:paramtypes", [mongoose_2.Model])
38
37
  ], DuplicateManyService);
39
38
  Object.defineProperty(DuplicateManyService, 'name', {
40
- value: provideServiceName(entity.name, version),
39
+ value: (0, helpers_1.provideName)('DuplicateMany', entity.name, version, 'Service'),
41
40
  writable: false,
42
41
  });
43
42
  return {
44
- provide: provideServiceName(entity.name, version),
43
+ provide: (0, helpers_1.provideName)('DuplicateMany', entity.name, version, 'Service'),
45
44
  useClass: DuplicateManyService,
46
45
  };
47
46
  }
@@ -57,13 +56,13 @@ function createDuplicateManyController(entity, controllerOptions, routeConfig, v
57
56
  DuplicateManyController = __decorate([
58
57
  (0, common_1.Controller)({ path, version }),
59
58
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
59
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
60
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
61
+ __param(0, (0, common_1.Inject)((0, helpers_1.provideName)('DuplicateMany', entity.name, version, 'Service'))),
63
62
  __metadata("design:paramtypes", [Object])
64
63
  ], DuplicateManyController);
65
64
  Object.defineProperty(DuplicateManyController, 'name', {
66
- value: `${(0, helpers_1.getNamePrefix)('DuplicateMany', entity.name, version)}Controller`,
65
+ value: `${(0, helpers_1.provideName)('DuplicateMany', entity.name, version, 'Controller')}`,
67
66
  writable: false,
68
67
  });
69
68
  return DuplicateManyController;
@@ -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,19 +17,18 @@ 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");
23
24
  const duplicate_one_controller_mixin_1 = require("./duplicate-one-controller.mixin");
24
- function provideServiceName(entityName, version) {
25
- return `${(0, helpers_1.getNamePrefix)('DuplicateOne', entityName, version)}Service`;
26
- }
27
- function createDuplicateOneServiceProvider(entity, version) {
25
+ function createDuplicateOneServiceProvider(entity, version, callback) {
28
26
  let DuplicateOneService = class DuplicateOneService extends base_duplicate_one_service_1.BaseDuplicateOneService {
29
27
  constructor(model) {
30
28
  super(model);
31
29
  this.model = model;
32
30
  this.entity = entity;
31
+ this.callback = callback;
33
32
  }
34
33
  };
35
34
  DuplicateOneService = __decorate([
@@ -37,11 +36,11 @@ function createDuplicateOneServiceProvider(entity, version) {
37
36
  __metadata("design:paramtypes", [mongoose_2.Model])
38
37
  ], DuplicateOneService);
39
38
  Object.defineProperty(DuplicateOneService, 'name', {
40
- value: provideServiceName(entity.name, version),
39
+ value: (0, helpers_1.provideName)('DuplicateOne', entity.name, version, 'Service'),
41
40
  writable: false,
42
41
  });
43
42
  return {
44
- provide: provideServiceName(entity.name, version),
43
+ provide: (0, helpers_1.provideName)('DuplicateOne', entity.name, version, 'Service'),
45
44
  useClass: DuplicateOneService,
46
45
  };
47
46
  }
@@ -57,13 +56,13 @@ function createDuplicateOneController(entity, controllerOptions, routeConfig, ve
57
56
  DuplicateOneController = __decorate([
58
57
  (0, common_1.Controller)({ path, version }),
59
58
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
59
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
60
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
61
+ __param(0, (0, common_1.Inject)((0, helpers_1.provideName)('DuplicateOne', entity.name, version, 'Service'))),
63
62
  __metadata("design:paramtypes", [Object])
64
63
  ], DuplicateOneController);
65
64
  Object.defineProperty(DuplicateOneController, 'name', {
66
- value: `${(0, helpers_1.getNamePrefix)('DuplicateOne', entity.name, version)}Controller`,
65
+ value: `${(0, helpers_1.provideName)('DuplicateOne', entity.name, version, 'Controller')}`,
67
66
  writable: false,
68
67
  });
69
68
  return DuplicateOneController;
@@ -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,19 +17,18 @@ 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");
23
24
  const get_many_controller_mixin_1 = require("./get-many-controller.mixin");
24
- function provideServiceName(entityName, version) {
25
- return `${(0, helpers_1.getNamePrefix)('GetMany', entityName, version)}Service`;
26
- }
27
- function createGetManyServiceProvider(entity, version) {
25
+ function createGetManyServiceProvider(entity, version, callback) {
28
26
  let GetManyService = class GetManyService extends base_get_many_service_1.BaseGetManyService {
29
27
  constructor(model) {
30
28
  super(model);
31
29
  this.model = model;
32
30
  this.entity = entity;
31
+ this.callback = callback;
33
32
  }
34
33
  };
35
34
  GetManyService = __decorate([
@@ -37,11 +36,11 @@ function createGetManyServiceProvider(entity, version) {
37
36
  __metadata("design:paramtypes", [mongoose_2.Model])
38
37
  ], GetManyService);
39
38
  Object.defineProperty(GetManyService, 'name', {
40
- value: provideServiceName(entity.name, version),
39
+ value: (0, helpers_1.provideName)('GetMany', entity.name, version, 'Service'),
41
40
  writable: false,
42
41
  });
43
42
  return {
44
- provide: provideServiceName(entity.name, version),
43
+ provide: (0, helpers_1.provideName)('GetMany', entity.name, version, 'Service'),
45
44
  useClass: GetManyService,
46
45
  };
47
46
  }
@@ -57,13 +56,13 @@ function createGetManyController(entity, controllerOptions, routeConfig, version
57
56
  GetManyController = __decorate([
58
57
  (0, common_1.Controller)({ path, version }),
59
58
  (0, swagger_1.ApiTags)(apiTag || entity.name),
60
- (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions)),
59
+ (0, decorators_1.ValidatorPipe)(validationPipeOptions),
61
60
  (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
62
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
61
+ __param(0, (0, common_1.Inject)((0, helpers_1.provideName)('GetMany', entity.name, version, 'Service'))),
63
62
  __metadata("design:paramtypes", [Object])
64
63
  ], GetManyController);
65
64
  Object.defineProperty(GetManyController, 'name', {
66
- value: `${(0, helpers_1.getNamePrefix)('GetMany', entity.name, version)}Controller`,
65
+ value: `${(0, helpers_1.provideName)('GetMany', entity.name, version, 'Controller')}`,
67
66
  writable: false,
68
67
  });
69
68
  return GetManyController;
@@ -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
  }