mongodb-dynamic-api 1.2.0 → 1.3.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 (114) hide show
  1. package/CHANGELOG.md +23 -14
  2. package/README.md +250 -22
  3. package/package.json +3 -3
  4. package/src/builders/route-decorators.builder.d.ts +3 -1
  5. package/src/builders/route-decorators.builder.js +16 -4
  6. package/src/dtos/delete-many-entity.query.d.ts +3 -0
  7. package/src/dtos/delete-many-entity.query.js +24 -0
  8. package/src/dtos/index.d.ts +1 -0
  9. package/src/dtos/index.js +1 -0
  10. package/src/dynamic-api.module.d.ts +1 -1
  11. package/src/dynamic-api.module.js +32 -13
  12. package/src/helpers/format.helper.d.ts +2 -0
  13. package/src/helpers/format.helper.js +12 -0
  14. package/src/helpers/index.d.ts +5 -1
  15. package/src/helpers/index.js +5 -1
  16. package/src/helpers/route-description.helper.d.ts +3 -0
  17. package/src/helpers/route-description.helper.js +34 -0
  18. package/src/helpers/swagger-config.helper.d.ts +4 -0
  19. package/src/helpers/{config.helper.js → swagger-config.helper.js} +36 -21
  20. package/src/helpers/validation-config.helper.d.ts +3 -0
  21. package/src/helpers/validation-config.helper.js +8 -0
  22. package/src/helpers/versioning-config.helper.d.ts +4 -0
  23. package/src/helpers/versioning-config.helper.js +15 -0
  24. package/src/{helpers/config.helper.d.ts → interfaces/dynamic-api-swagger-options.type.d.ts} +23 -15
  25. package/src/interfaces/dynamic-api-swagger-options.type.js +2 -0
  26. package/src/interfaces/index.d.ts +1 -1
  27. package/src/interfaces/index.js +1 -1
  28. package/src/interfaces/route-config.interface.d.ts +1 -1
  29. package/src/modules/create-many/create-many-controller.mixin.js +6 -6
  30. package/src/modules/create-many/create-many.helper.d.ts +1 -1
  31. package/src/modules/create-many/create-many.helper.js +8 -7
  32. package/src/modules/create-many/create-many.module.d.ts +2 -2
  33. package/src/modules/create-many/create-many.module.js +2 -2
  34. package/src/modules/create-one/create-one-controller.mixin.js +5 -5
  35. package/src/modules/create-one/create-one.helper.d.ts +1 -1
  36. package/src/modules/create-one/create-one.helper.js +8 -7
  37. package/src/modules/create-one/create-one.module.d.ts +2 -2
  38. package/src/modules/create-one/create-one.module.js +2 -2
  39. package/src/modules/delete-many/base-delete-many.service.d.ts +34 -0
  40. package/src/modules/delete-many/base-delete-many.service.js +29 -0
  41. package/src/modules/delete-many/delete-many-controller.interface.d.ts +8 -0
  42. package/src/modules/delete-many/delete-many-controller.interface.js +2 -0
  43. package/src/modules/delete-many/delete-many-controller.mixin.d.ts +6 -0
  44. package/src/modules/delete-many/delete-many-controller.mixin.js +54 -0
  45. package/src/modules/delete-many/delete-many-service.interface.d.ts +6 -0
  46. package/src/modules/delete-many/delete-many-service.interface.js +2 -0
  47. package/src/modules/delete-many/delete-many.helper.d.ts +7 -0
  48. package/src/modules/delete-many/delete-many.helper.js +69 -0
  49. package/src/modules/delete-many/delete-many.module.d.ts +6 -0
  50. package/src/modules/delete-many/delete-many.module.js +28 -0
  51. package/src/modules/delete-many/delete-many.presenter.d.ts +3 -0
  52. package/src/modules/delete-many/delete-many.presenter.js +20 -0
  53. package/src/modules/delete-many/index.d.ts +7 -0
  54. package/src/modules/delete-many/index.js +23 -0
  55. package/src/modules/delete-one/delete-one-controller.mixin.js +5 -5
  56. package/src/modules/delete-one/delete-one.helper.d.ts +1 -1
  57. package/src/modules/delete-one/delete-one.helper.js +8 -7
  58. package/src/modules/delete-one/delete-one.module.d.ts +2 -2
  59. package/src/modules/delete-one/delete-one.module.js +2 -2
  60. package/src/modules/duplicate-many/base-duplicate-many.service.d.ts +33 -0
  61. package/src/modules/duplicate-many/base-duplicate-many.service.js +43 -0
  62. package/src/modules/duplicate-many/duplicate-many-controller.interface.d.ts +7 -0
  63. package/src/modules/duplicate-many/duplicate-many-controller.interface.js +2 -0
  64. package/src/modules/duplicate-many/duplicate-many-controller.mixin.d.ts +6 -0
  65. package/src/modules/duplicate-many/duplicate-many-controller.mixin.js +63 -0
  66. package/src/modules/duplicate-many/duplicate-many-service.interface.d.ts +5 -0
  67. package/src/modules/duplicate-many/duplicate-many-service.interface.js +2 -0
  68. package/src/modules/duplicate-many/duplicate-many.helper.d.ts +7 -0
  69. package/src/modules/duplicate-many/duplicate-many.helper.js +69 -0
  70. package/src/modules/duplicate-many/duplicate-many.module.d.ts +6 -0
  71. package/src/modules/duplicate-many/duplicate-many.module.js +28 -0
  72. package/src/modules/duplicate-many/index.d.ts +6 -0
  73. package/src/modules/duplicate-many/index.js +22 -0
  74. package/src/modules/duplicate-one/duplicate-one-controller.mixin.js +6 -6
  75. package/src/modules/duplicate-one/duplicate-one.helper.d.ts +1 -1
  76. package/src/modules/duplicate-one/duplicate-one.helper.js +8 -7
  77. package/src/modules/duplicate-one/duplicate-one.module.d.ts +2 -2
  78. package/src/modules/duplicate-one/duplicate-one.module.js +2 -2
  79. package/src/modules/get-many/get-many-controller.mixin.js +5 -5
  80. package/src/modules/get-many/get-many.helper.d.ts +1 -1
  81. package/src/modules/get-many/get-many.helper.js +8 -7
  82. package/src/modules/get-many/get-many.module.d.ts +2 -2
  83. package/src/modules/get-many/get-many.module.js +2 -2
  84. package/src/modules/get-one/get-one-controller.mixin.js +6 -6
  85. package/src/modules/get-one/get-one.helper.d.ts +1 -1
  86. package/src/modules/get-one/get-one.helper.js +8 -7
  87. package/src/modules/get-one/get-one.module.d.ts +2 -2
  88. package/src/modules/get-one/get-one.module.js +2 -2
  89. package/src/modules/replace-one/replace-one-controller.mixin.js +6 -6
  90. package/src/modules/replace-one/replace-one.helper.d.ts +1 -1
  91. package/src/modules/replace-one/replace-one.helper.js +8 -7
  92. package/src/modules/replace-one/replace-one.module.d.ts +2 -2
  93. package/src/modules/replace-one/replace-one.module.js +2 -2
  94. package/src/modules/update-many/base-update-many.service.d.ts +33 -0
  95. package/src/modules/update-many/base-update-many.service.js +32 -0
  96. package/src/modules/update-many/index.d.ts +6 -0
  97. package/src/modules/update-many/index.js +22 -0
  98. package/src/modules/update-many/update-many-controller.interface.d.ts +7 -0
  99. package/src/modules/update-many/update-many-controller.interface.js +2 -0
  100. package/src/modules/update-many/update-many-controller.mixin.d.ts +6 -0
  101. package/src/modules/update-many/update-many-controller.mixin.js +63 -0
  102. package/src/modules/update-many/update-many-service.interface.d.ts +5 -0
  103. package/src/modules/update-many/update-many-service.interface.js +2 -0
  104. package/src/modules/update-many/update-many.helper.d.ts +7 -0
  105. package/src/modules/update-many/update-many.helper.js +69 -0
  106. package/src/modules/update-many/update-many.module.d.ts +6 -0
  107. package/src/modules/update-many/update-many.module.js +28 -0
  108. package/src/modules/update-one/update-one-controller.mixin.js +6 -6
  109. package/src/modules/update-one/update-one.helper.d.ts +1 -1
  110. package/src/modules/update-one/update-one.helper.js +8 -7
  111. package/src/modules/update-one/update-one.module.d.ts +2 -2
  112. package/src/modules/update-one/update-one.module.js +2 -2
  113. package/src/version.json +1 -1
  114. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidVersion = exports.pascalCase = void 0;
4
+ const lodash_1 = require("lodash");
5
+ function pascalCase(str) {
6
+ return str ? (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(str)) : undefined;
7
+ }
8
+ exports.pascalCase = pascalCase;
9
+ function isValidVersion(version) {
10
+ return /^\d+$/.test(version);
11
+ }
12
+ exports.isValidVersion = isValidVersion;
@@ -1,2 +1,6 @@
1
- export * from './config.helper';
1
+ export * from './format.helper';
2
2
  export * from './route-decorators.helper';
3
+ export * from './route-description.helper';
4
+ export * from './swagger-config.helper';
5
+ export * from './validation-config.helper';
6
+ export * from './versioning-config.helper';
@@ -14,5 +14,9 @@ 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("./config.helper"), exports);
17
+ __exportStar(require("./format.helper"), exports);
18
18
  __exportStar(require("./route-decorators.helper"), exports);
19
+ __exportStar(require("./route-description.helper"), exports);
20
+ __exportStar(require("./swagger-config.helper"), exports);
21
+ __exportStar(require("./validation-config.helper"), exports);
22
+ __exportStar(require("./versioning-config.helper"), exports);
@@ -0,0 +1,3 @@
1
+ import { RouteType } from '../interfaces';
2
+ declare function getDefaultRouteDescription(routeType: RouteType, entityName: string): string;
3
+ export { getDefaultRouteDescription };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultRouteDescription = void 0;
4
+ const lodash_1 = require("lodash");
5
+ function getDefaultRouteDescription(routeType, entityName) {
6
+ const contentName = (0, lodash_1.lowerCase)(entityName);
7
+ switch (routeType) {
8
+ case 'CreateMany':
9
+ return `Create many ${contentName}`;
10
+ case 'CreateOne':
11
+ return `Create one ${contentName}`;
12
+ case 'DeleteMany':
13
+ return `Delete many ${contentName}`;
14
+ case 'DeleteOne':
15
+ return `Delete one ${contentName}`;
16
+ case 'DuplicateMany':
17
+ return `Duplicate many ${contentName}`;
18
+ case 'DuplicateOne':
19
+ return `Duplicate one ${contentName}`;
20
+ case 'GetMany':
21
+ return `Get many ${contentName}`;
22
+ case 'GetOne':
23
+ return `Get one ${contentName} by id`;
24
+ case 'ReplaceOne':
25
+ return `Replace one ${contentName}`;
26
+ case 'UpdateMany':
27
+ return `Update many ${contentName}`;
28
+ case 'UpdateOne':
29
+ return `Update one ${contentName}`;
30
+ default:
31
+ throw new Error(`Route type "${routeType}" is not supported`);
32
+ }
33
+ }
34
+ exports.getDefaultRouteDescription = getDefaultRouteDescription;
@@ -0,0 +1,4 @@
1
+ import { INestApplication } from '@nestjs/common';
2
+ import { DynamicAPISwaggerOptions } from '../interfaces';
3
+ declare function enableDynamicAPISwagger(app: INestApplication, options?: DynamicAPISwaggerOptions): void;
4
+ export { enableDynamicAPISwagger };
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enableDynamicAPIValidation = exports.enableDynamicAPIVersioning = exports.enableDynamicAPISwagger = void 0;
4
- const common_1 = require("@nestjs/common");
3
+ exports.enableDynamicAPISwagger = void 0;
5
4
  const swagger_1 = require("@nestjs/swagger");
6
5
  const version_json_1 = require("../version.json");
7
6
  function buildExtraConfig(config, swaggerConfig) {
@@ -52,19 +51,44 @@ function buildExtraConfig(config, swaggerConfig) {
52
51
  });
53
52
  break;
54
53
  case 'bearerAuth':
55
- config.addBearerAuth(value);
54
+ if (typeof value === 'boolean' && value) {
55
+ config.addBearerAuth();
56
+ }
57
+ else {
58
+ config.addBearerAuth(value);
59
+ }
56
60
  break;
57
61
  case 'oAuth2':
58
- config.addOAuth2(value);
62
+ if (typeof value === 'boolean' && value) {
63
+ config.addOAuth2();
64
+ }
65
+ else {
66
+ config.addOAuth2(value);
67
+ }
59
68
  break;
60
69
  case 'apiKey':
61
- config.addApiKey(value);
70
+ if (typeof value === 'boolean' && value) {
71
+ config.addApiKey();
72
+ }
73
+ else {
74
+ config.addApiKey(value);
75
+ }
62
76
  break;
63
77
  case 'basicAuth':
64
- config.addBasicAuth(value);
78
+ if (typeof value === 'boolean' && value) {
79
+ config.addBasicAuth();
80
+ }
81
+ else {
82
+ config.addBasicAuth(value);
83
+ }
65
84
  break;
66
85
  case 'cookieAuth':
67
- config.addCookieAuth(value.cookieName, value.options, value.securityName);
86
+ if (typeof value === 'boolean' && value) {
87
+ config.addCookieAuth();
88
+ }
89
+ else {
90
+ config.addCookieAuth(value.cookieName, value.options, value.securityName);
91
+ }
68
92
  break;
69
93
  default:
70
94
  break;
@@ -72,24 +96,15 @@ function buildExtraConfig(config, swaggerConfig) {
72
96
  });
73
97
  }
74
98
  function enableDynamicAPISwagger(app, options = {}) {
75
- const { title = 'MongoDB Dynamic API', description = 'Auto generated CRUD for MongoDB', version = version_json_1.default?.version?.split('-beta')[0], path = '/openapi', swaggerConfig, swaggerOptions, } = options ?? {};
99
+ const { title = 'MongoDB Dynamic API', description = 'Auto generated CRUD for MongoDB', version = version_json_1.default?.version?.split('-beta')[0], path = '/dynamic-api', swaggerExtraConfig, swaggerDocumentOptions, } = options ?? {};
76
100
  const config = new swagger_1.DocumentBuilder()
77
101
  .setTitle(title)
78
102
  .setDescription(description)
79
103
  .setVersion(version);
80
- buildExtraConfig(config, swaggerConfig ?? {});
81
- const document = swagger_1.SwaggerModule.createDocument(app, config.build(), swaggerOptions);
104
+ if (swaggerExtraConfig) {
105
+ buildExtraConfig(config, swaggerExtraConfig);
106
+ }
107
+ const document = swagger_1.SwaggerModule.createDocument(app, config.build(), swaggerDocumentOptions);
82
108
  swagger_1.SwaggerModule.setup(path, app, document);
83
109
  }
84
110
  exports.enableDynamicAPISwagger = enableDynamicAPISwagger;
85
- function enableDynamicAPIVersioning(app, options) {
86
- app.enableVersioning({
87
- type: common_1.VersioningType.URI,
88
- ...options,
89
- });
90
- }
91
- exports.enableDynamicAPIVersioning = enableDynamicAPIVersioning;
92
- function enableDynamicAPIValidation(app, options = {}) {
93
- app.useGlobalPipes(new common_1.ValidationPipe(options));
94
- }
95
- exports.enableDynamicAPIValidation = enableDynamicAPIValidation;
@@ -0,0 +1,3 @@
1
+ import { INestApplication, ValidationPipeOptions } from '@nestjs/common';
2
+ declare function enableDynamicAPIValidation(app: INestApplication, options?: ValidationPipeOptions): void;
3
+ export { enableDynamicAPIValidation };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enableDynamicAPIValidation = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ function enableDynamicAPIValidation(app, options = {}) {
6
+ app.useGlobalPipes(new common_1.ValidationPipe(options));
7
+ }
8
+ exports.enableDynamicAPIValidation = enableDynamicAPIValidation;
@@ -0,0 +1,4 @@
1
+ import { INestApplication, VersioningOptions } from '@nestjs/common';
2
+ declare function enableDynamicAPIVersioning(app: INestApplication, options?: VersioningOptions): void;
3
+ declare function addVersionSuffix(version?: string): string;
4
+ export { addVersionSuffix, enableDynamicAPIVersioning };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enableDynamicAPIVersioning = exports.addVersionSuffix = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ function enableDynamicAPIVersioning(app, options) {
6
+ app.enableVersioning({
7
+ type: common_1.VersioningType.URI,
8
+ ...options,
9
+ });
10
+ }
11
+ exports.enableDynamicAPIVersioning = enableDynamicAPIVersioning;
12
+ function addVersionSuffix(version) {
13
+ return version ? `V${version}` : '';
14
+ }
15
+ exports.addVersionSuffix = addVersionSuffix;
@@ -1,4 +1,3 @@
1
- import { INestApplication, ValidationPipeOptions, VersioningOptions } from '@nestjs/common';
2
1
  import { SwaggerDocumentOptions } from '@nestjs/swagger';
3
2
  import { ExternalDocumentationObject, ParameterObject, SecuritySchemeObject, ServerVariableObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';
4
3
  type DynamicAPISwaggerExtraConfig = {
@@ -37,25 +36,34 @@ type DynamicAPISwaggerExtraConfig = {
37
36
  securityRequirements?: {
38
37
  [key: string]: string[];
39
38
  };
40
- bearerAuth?: SecuritySchemeObject;
41
- oAuth2?: SecuritySchemeObject;
42
- apiKey?: SecuritySchemeObject;
43
- basicAuth?: SecuritySchemeObject;
39
+ bearerAuth?: {
40
+ options?: SecuritySchemeObject;
41
+ name?: string;
42
+ } | boolean;
43
+ oAuth2?: {
44
+ options?: SecuritySchemeObject;
45
+ name?: string;
46
+ } | boolean;
47
+ apiKey?: {
48
+ options?: SecuritySchemeObject;
49
+ name?: string;
50
+ } | boolean;
51
+ basicAuth?: {
52
+ options?: SecuritySchemeObject;
53
+ name?: string;
54
+ } | boolean;
44
55
  cookieAuth?: {
45
- cookieName: string;
46
- options: SecuritySchemeObject;
47
- securityName: string;
48
- };
56
+ cookieName?: string;
57
+ options?: SecuritySchemeObject;
58
+ securityName?: string;
59
+ } | boolean;
49
60
  };
50
61
  type DynamicAPISwaggerOptions = {
51
62
  title?: string;
52
63
  description?: string;
53
64
  version?: string;
54
65
  path?: string;
55
- swaggerConfig?: DynamicAPISwaggerExtraConfig;
56
- swaggerOptions?: SwaggerDocumentOptions;
66
+ swaggerExtraConfig?: DynamicAPISwaggerExtraConfig;
67
+ swaggerDocumentOptions?: SwaggerDocumentOptions;
57
68
  };
58
- declare function enableDynamicAPISwagger(app: INestApplication, options?: DynamicAPISwaggerOptions): void;
59
- declare function enableDynamicAPIVersioning(app: INestApplication, options?: VersioningOptions): void;
60
- declare function enableDynamicAPIValidation(app: INestApplication, options?: ValidationPipeOptions): void;
61
- export { enableDynamicAPISwagger, enableDynamicAPIVersioning, enableDynamicAPIValidation, DynamicAPISwaggerOptions, DynamicAPISwaggerExtraConfig, };
69
+ export { DynamicAPISwaggerOptions, DynamicAPISwaggerExtraConfig };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +1,6 @@
1
1
  export * from './entity-mappers.interface';
2
2
  export * from './dynamic-api-options.interface';
3
3
  export * from './dynamic-api-schema-options.interface';
4
- export * from './maybe-promise.type';
4
+ export * from './dynamic-api-swagger-options.type';
5
5
  export * from './route-config.interface';
6
6
  export * from './service-provider.interface';
@@ -17,6 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./entity-mappers.interface"), exports);
18
18
  __exportStar(require("./dynamic-api-options.interface"), exports);
19
19
  __exportStar(require("./dynamic-api-schema-options.interface"), exports);
20
- __exportStar(require("./maybe-promise.type"), exports);
20
+ __exportStar(require("./dynamic-api-swagger-options.type"), exports);
21
21
  __exportStar(require("./route-config.interface"), exports);
22
22
  __exportStar(require("./service-provider.interface"), exports);
@@ -1,6 +1,6 @@
1
1
  import { Type, ValidationPipeOptions } from '@nestjs/common';
2
2
  import { BaseEntity } from '../models';
3
- type RouteType = 'GetMany' | 'GetOne' | 'CreateOne' | 'CreateMany' | 'UpdateOne' | 'ReplaceOne' | 'DeleteOne' | 'DuplicateOne';
3
+ type RouteType = 'CreateMany' | 'CreateOne' | 'DeleteMany' | 'DeleteOne' | 'DuplicateMany' | 'DuplicateOne' | 'GetMany' | 'GetOne' | 'ReplaceOne' | 'UpdateMany' | 'UpdateOne';
4
4
  type DTOsBundle = {
5
5
  query?: Type;
6
6
  param?: Type;
@@ -21,12 +21,12 @@ const builders_1 = require("../../builders");
21
21
  const helpers_1 = require("../../helpers");
22
22
  const mixins_1 = require("../../mixins");
23
23
  function CreateManyControllerMixin(entity, path, apiTag, version, description, DTOs) {
24
- const displayedName = apiTag ?? entity.name;
24
+ const displayedName = (0, helpers_1.pascalCase)(apiTag) ?? entity.name;
25
25
  const { body: CustomBody, presenter: CustomPresenter } = DTOs ?? {};
26
26
  class DtoBody extends (0, mixins_1.EntityBodyMixin)(entity) {
27
27
  }
28
28
  Object.defineProperty(DtoBody, 'name', {
29
- value: `${displayedName}Dto`,
29
+ value: `${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Dto`,
30
30
  writable: false,
31
31
  });
32
32
  class CreateManyBody {
@@ -43,7 +43,7 @@ function CreateManyControllerMixin(entity, path, apiTag, version, description, D
43
43
  }
44
44
  if (!CustomBody) {
45
45
  Object.defineProperty(RouteBody, 'name', {
46
- value: `CreateMany${displayedName}Dto`,
46
+ value: `CreateMany${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Dto`,
47
47
  writable: false,
48
48
  });
49
49
  }
@@ -51,11 +51,11 @@ function CreateManyControllerMixin(entity, path, apiTag, version, description, D
51
51
  }
52
52
  if (!CustomPresenter) {
53
53
  Object.defineProperty(RoutePresenter, 'name', {
54
- value: `${displayedName}Presenter`,
54
+ value: `${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Presenter`,
55
55
  writable: false,
56
56
  });
57
57
  }
58
- const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder('CreateMany', entity, description, undefined, undefined, RouteBody, RoutePresenter);
58
+ const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder('CreateMany', entity, version, description, undefined, undefined, RouteBody, RoutePresenter);
59
59
  class BaseCreateManyController {
60
60
  constructor(service) {
61
61
  this.service = service;
@@ -73,7 +73,7 @@ function CreateManyControllerMixin(entity, path, apiTag, version, description, D
73
73
  __metadata("design:returntype", Promise)
74
74
  ], BaseCreateManyController.prototype, "createMany", null);
75
75
  Object.defineProperty(BaseCreateManyController, 'name', {
76
- value: `CreateMany${entity.name}Controller`,
76
+ value: `BaseCreateMany${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
77
77
  writable: false,
78
78
  });
79
79
  return BaseCreateManyController;
@@ -2,6 +2,6 @@ import { Type, ValidationPipeOptions } from '@nestjs/common';
2
2
  import { DTOsBundle, ServiceProvider } 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>): ServiceProvider;
5
+ declare function createCreateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): ServiceProvider;
6
6
  declare function createCreateManyController<Entity extends BaseEntity>(entity: Type<Entity>, path: string, apiTag?: string, version?: string, description?: string, DTOs?: DTOsBundle, validationPipeOptions?: ValidationPipeOptions): CreateManyControllerConstructor<Entity>;
7
7
  export { createCreateManyController, createCreateManyServiceProvider };
@@ -18,12 +18,13 @@ const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
20
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
+ const helpers_1 = require("../../helpers");
21
22
  const base_create_many_service_1 = require("./base-create-many.service");
22
23
  const create_many_controller_mixin_1 = require("./create-many-controller.mixin");
23
- function provideServiceName(entityName) {
24
- return `CreateMany${entityName}Service`;
24
+ function provideServiceName(entityName, version) {
25
+ return `CreateMany${entityName}${(0, helpers_1.addVersionSuffix)(version)}Service`;
25
26
  }
26
- function createCreateManyServiceProvider(entity) {
27
+ function createCreateManyServiceProvider(entity, version) {
27
28
  let CreateManyService = class CreateManyService extends base_create_many_service_1.BaseCreateManyService {
28
29
  constructor(model) {
29
30
  super(model);
@@ -36,11 +37,11 @@ function createCreateManyServiceProvider(entity) {
36
37
  __metadata("design:paramtypes", [mongoose_2.Model])
37
38
  ], CreateManyService);
38
39
  Object.defineProperty(CreateManyService, 'name', {
39
- value: provideServiceName(entity.name),
40
+ value: provideServiceName(entity.name, version),
40
41
  writable: false,
41
42
  });
42
43
  return {
43
- provide: provideServiceName(entity.name),
44
+ provide: provideServiceName(entity.name, version),
44
45
  useClass: CreateManyService,
45
46
  };
46
47
  }
@@ -56,11 +57,11 @@ function createCreateManyController(entity, path, apiTag, version, description,
56
57
  (0, common_1.Controller)({ path, version }),
57
58
  (0, swagger_1.ApiTags)(apiTag || entity.name),
58
59
  (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions ?? { transform: true })),
59
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name))),
60
+ __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
60
61
  __metadata("design:paramtypes", [Object])
61
62
  ], CreateManyController);
62
63
  Object.defineProperty(CreateManyController, 'name', {
63
- value: `CreateMany${entity.name}Controller`,
64
+ value: `CreateMany${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
64
65
  writable: false,
65
66
  });
66
67
  return CreateManyController;
@@ -1,6 +1,6 @@
1
1
  import { DynamicModule, Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DTOsBundle } from '../../interfaces';
2
+ import { ControllerOptions, RouteConfig } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  export declare class CreateManyModule {
5
- static forFeature<Entity extends BaseEntity>(databaseModule: DynamicModule, entity: Type<Entity>, path: string, apiTag?: string, version?: string, description?: string, DTOs?: DTOsBundle, validationPipeOptions?: ValidationPipeOptions): DynamicModule;
5
+ static forFeature<Entity extends BaseEntity>(databaseModule: DynamicModule, entity: Type<Entity>, { path, apiTag }: ControllerOptions, { description, dTOs: DTOs }: RouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): DynamicModule;
6
6
  }
@@ -11,9 +11,9 @@ exports.CreateManyModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const create_many_helper_1 = require("./create-many.helper");
13
13
  let CreateManyModule = CreateManyModule_1 = class CreateManyModule {
14
- static forFeature(databaseModule, entity, path, apiTag, version, description, DTOs, validationPipeOptions) {
14
+ static forFeature(databaseModule, entity, { path, apiTag }, { description, dTOs: DTOs }, version, validationPipeOptions) {
15
15
  const controller = (0, create_many_helper_1.createCreateManyController)(entity, path, apiTag, version, description, DTOs, validationPipeOptions);
16
- const ServiceProvider = (0, create_many_helper_1.createCreateManyServiceProvider)(entity);
16
+ const ServiceProvider = (0, create_many_helper_1.createCreateManyServiceProvider)(entity, version);
17
17
  return {
18
18
  module: CreateManyModule_1,
19
19
  imports: [databaseModule],
@@ -18,13 +18,13 @@ const builders_1 = require("../../builders");
18
18
  const helpers_1 = require("../../helpers");
19
19
  const mixins_1 = require("../../mixins");
20
20
  function CreateOneControllerMixin(entity, path, apiTag, version, description, DTOs) {
21
- const displayedName = apiTag ?? entity.name;
21
+ const displayedName = (0, helpers_1.pascalCase)(apiTag) ?? entity.name;
22
22
  const { body: CustomBody, presenter: CustomPresenter } = DTOs ?? {};
23
23
  class RouteBody extends (CustomBody ?? (0, mixins_1.EntityBodyMixin)(entity)) {
24
24
  }
25
25
  if (!CustomBody) {
26
26
  Object.defineProperty(RouteBody, 'name', {
27
- value: `CreateOne${displayedName}Dto`,
27
+ value: `CreateOne${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Dto`,
28
28
  writable: false,
29
29
  });
30
30
  }
@@ -32,11 +32,11 @@ function CreateOneControllerMixin(entity, path, apiTag, version, description, DT
32
32
  }
33
33
  if (!CustomPresenter) {
34
34
  Object.defineProperty(RoutePresenter, 'name', {
35
- value: `${displayedName}Presenter`,
35
+ value: `${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Presenter`,
36
36
  writable: false,
37
37
  });
38
38
  }
39
- const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder('CreateOne', entity, description, undefined, undefined, RouteBody, RoutePresenter);
39
+ const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder('CreateOne', entity, version, description, undefined, undefined, RouteBody, RoutePresenter);
40
40
  class BaseCreateOneController {
41
41
  constructor(service) {
42
42
  this.service = service;
@@ -54,7 +54,7 @@ function CreateOneControllerMixin(entity, path, apiTag, version, description, DT
54
54
  __metadata("design:returntype", Promise)
55
55
  ], BaseCreateOneController.prototype, "createOne", null);
56
56
  Object.defineProperty(BaseCreateOneController, 'name', {
57
- value: `CreateOne${entity.name}Controller`,
57
+ value: `BaseCreateOne${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
58
58
  writable: false,
59
59
  });
60
60
  return BaseCreateOneController;
@@ -2,6 +2,6 @@ import { Type, ValidationPipeOptions } from '@nestjs/common';
2
2
  import { DTOsBundle, ServiceProvider } 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>): ServiceProvider;
5
+ declare function createCreateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): ServiceProvider;
6
6
  declare function createCreateOneController<Entity extends BaseEntity>(entity: Type<Entity>, path: string, apiTag?: string, version?: string, description?: string, DTOs?: DTOsBundle, validationPipeOptions?: ValidationPipeOptions): CreateOneControllerConstructor<Entity>;
7
7
  export { createCreateOneController, createCreateOneServiceProvider };
@@ -18,12 +18,13 @@ const mongoose_1 = require("@nestjs/mongoose");
18
18
  const swagger_1 = require("@nestjs/swagger");
19
19
  const mongoose_2 = require("mongoose");
20
20
  const dynamic_api_module_1 = require("../../dynamic-api.module");
21
+ const helpers_1 = require("../../helpers");
21
22
  const base_create_one_service_1 = require("./base-create-one.service");
22
23
  const create_one_controller_mixin_1 = require("./create-one-controller.mixin");
23
- function provideServiceName(entityName) {
24
- return `CreateOne${entityName}Service`;
24
+ function provideServiceName(entityName, version) {
25
+ return `CreateOne${entityName}${(0, helpers_1.addVersionSuffix)(version)}Service`;
25
26
  }
26
- function createCreateOneServiceProvider(entity) {
27
+ function createCreateOneServiceProvider(entity, version) {
27
28
  let CreateOneService = class CreateOneService extends base_create_one_service_1.BaseCreateOneService {
28
29
  constructor(model) {
29
30
  super(model);
@@ -36,11 +37,11 @@ function createCreateOneServiceProvider(entity) {
36
37
  __metadata("design:paramtypes", [mongoose_2.Model])
37
38
  ], CreateOneService);
38
39
  Object.defineProperty(CreateOneService, 'name', {
39
- value: provideServiceName(entity.name),
40
+ value: provideServiceName(entity.name, version),
40
41
  writable: false,
41
42
  });
42
43
  return {
43
- provide: provideServiceName(entity.name),
44
+ provide: provideServiceName(entity.name, version),
44
45
  useClass: CreateOneService,
45
46
  };
46
47
  }
@@ -56,11 +57,11 @@ function createCreateOneController(entity, path, apiTag, version, description, D
56
57
  (0, common_1.Controller)({ path, version }),
57
58
  (0, swagger_1.ApiTags)(apiTag || entity.name),
58
59
  (0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions ?? { transform: true })),
59
- __param(0, (0, common_1.Inject)(provideServiceName(entity.name))),
60
+ __param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
60
61
  __metadata("design:paramtypes", [Object])
61
62
  ], CreateOneController);
62
63
  Object.defineProperty(CreateOneController, 'name', {
63
- value: `CreateOne${entity.name}Controller`,
64
+ value: `CreateOne${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
64
65
  writable: false,
65
66
  });
66
67
  return CreateOneController;
@@ -1,6 +1,6 @@
1
1
  import { DynamicModule, Type, ValidationPipeOptions } from '@nestjs/common';
2
- import { DTOsBundle } from '../../interfaces';
2
+ import { ControllerOptions, RouteConfig } from '../../interfaces';
3
3
  import { BaseEntity } from '../../models';
4
4
  export declare class CreateOneModule {
5
- static forFeature<Entity extends BaseEntity>(databaseModule: DynamicModule, entity: Type<Entity>, path: string, apiTag?: string, version?: string, description?: string, DTOs?: DTOsBundle, validationPipeOptions?: ValidationPipeOptions): DynamicModule;
5
+ static forFeature<Entity extends BaseEntity>(databaseModule: DynamicModule, entity: Type<Entity>, { path, apiTag }: ControllerOptions, { description, dTOs: DTOs }: RouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): DynamicModule;
6
6
  }
@@ -11,9 +11,9 @@ exports.CreateOneModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const create_one_helper_1 = require("./create-one.helper");
13
13
  let CreateOneModule = CreateOneModule_1 = class CreateOneModule {
14
- static forFeature(databaseModule, entity, path, apiTag, version, description, DTOs, validationPipeOptions) {
14
+ static forFeature(databaseModule, entity, { path, apiTag }, { description, dTOs: DTOs }, version, validationPipeOptions) {
15
15
  const controller = (0, create_one_helper_1.createCreateOneController)(entity, path, apiTag, version, description, DTOs, validationPipeOptions);
16
- const ServiceProvider = (0, create_one_helper_1.createCreateOneServiceProvider)(entity);
16
+ const ServiceProvider = (0, create_one_helper_1.createCreateOneServiceProvider)(entity, version);
17
17
  return {
18
18
  module: CreateOneModule_1,
19
19
  imports: [databaseModule],
@@ -0,0 +1,34 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import { Model } from 'mongoose';
26
+ import { BaseEntity } from '../../models';
27
+ import { BaseService } from '../../services';
28
+ import { DeleteManyService } from './delete-many-service.interface';
29
+ import { DeleteManyPresenter } from './delete-many.presenter';
30
+ export declare abstract class BaseDeleteManyService<Entity extends BaseEntity> extends BaseService<Entity> implements DeleteManyService<Entity> {
31
+ protected readonly model: Model<Entity>;
32
+ protected constructor(model: Model<Entity>);
33
+ deleteMany(ids: string[]): Promise<DeleteManyPresenter>;
34
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseDeleteManyService = void 0;
4
+ const builder_pattern_1 = require("builder-pattern");
5
+ const services_1 = require("../../services");
6
+ const delete_many_presenter_1 = require("./delete-many.presenter");
7
+ class BaseDeleteManyService extends services_1.BaseService {
8
+ constructor(model) {
9
+ super(model);
10
+ this.model = model;
11
+ }
12
+ async deleteMany(ids) {
13
+ let op;
14
+ if (this.isSoftDeletable) {
15
+ const deleted = await this.model
16
+ .updateMany({
17
+ _id: { $in: ids },
18
+ isDeleted: false,
19
+ }, { $set: { isDeleted: true, deletedAt: Date.now() } })
20
+ .exec();
21
+ op = { deletedCount: deleted.modifiedCount };
22
+ }
23
+ else {
24
+ op = await this.model.deleteMany({ _id: { $in: ids } }).exec();
25
+ }
26
+ return (0, builder_pattern_1.Builder)(delete_many_presenter_1.DeleteManyPresenter).deletedCount(op.deletedCount).build();
27
+ }
28
+ }
29
+ exports.BaseDeleteManyService = BaseDeleteManyService;
@@ -0,0 +1,8 @@
1
+ import { BaseEntity } from '../../models';
2
+ import { DeletedCount } from '../delete-one';
3
+ import { DeleteManyService } from './delete-many-service.interface';
4
+ interface DeleteManyController<Entity extends BaseEntity> {
5
+ deleteMany(ids: string[]): Promise<DeletedCount>;
6
+ }
7
+ type DeleteManyControllerConstructor<Entity extends BaseEntity> = new (service: DeleteManyService<Entity>) => DeleteManyController<Entity>;
8
+ export type { DeleteManyController, DeleteManyControllerConstructor };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { DTOsBundle } from '../../interfaces';
3
+ import { BaseEntity } from '../../models';
4
+ import { DeleteManyControllerConstructor } from './delete-many-controller.interface';
5
+ declare function DeleteManyControllerMixin<Entity extends BaseEntity>(entity: Type<Entity>, path: string, apiTag?: string, version?: string, description?: string, DTOs?: DTOsBundle): DeleteManyControllerConstructor<Entity>;
6
+ export { DeleteManyControllerMixin };