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.
- package/CHANGELOG.md +23 -14
- package/README.md +250 -22
- package/package.json +3 -3
- package/src/builders/route-decorators.builder.d.ts +3 -1
- package/src/builders/route-decorators.builder.js +16 -4
- package/src/dtos/delete-many-entity.query.d.ts +3 -0
- package/src/dtos/delete-many-entity.query.js +24 -0
- package/src/dtos/index.d.ts +1 -0
- package/src/dtos/index.js +1 -0
- package/src/dynamic-api.module.d.ts +1 -1
- package/src/dynamic-api.module.js +32 -13
- package/src/helpers/format.helper.d.ts +2 -0
- package/src/helpers/format.helper.js +12 -0
- package/src/helpers/index.d.ts +5 -1
- package/src/helpers/index.js +5 -1
- package/src/helpers/route-description.helper.d.ts +3 -0
- package/src/helpers/route-description.helper.js +34 -0
- package/src/helpers/swagger-config.helper.d.ts +4 -0
- package/src/helpers/{config.helper.js → swagger-config.helper.js} +36 -21
- package/src/helpers/validation-config.helper.d.ts +3 -0
- package/src/helpers/validation-config.helper.js +8 -0
- package/src/helpers/versioning-config.helper.d.ts +4 -0
- package/src/helpers/versioning-config.helper.js +15 -0
- package/src/{helpers/config.helper.d.ts → interfaces/dynamic-api-swagger-options.type.d.ts} +23 -15
- package/src/interfaces/dynamic-api-swagger-options.type.js +2 -0
- package/src/interfaces/index.d.ts +1 -1
- package/src/interfaces/index.js +1 -1
- package/src/interfaces/route-config.interface.d.ts +1 -1
- package/src/modules/create-many/create-many-controller.mixin.js +6 -6
- package/src/modules/create-many/create-many.helper.d.ts +1 -1
- package/src/modules/create-many/create-many.helper.js +8 -7
- package/src/modules/create-many/create-many.module.d.ts +2 -2
- package/src/modules/create-many/create-many.module.js +2 -2
- package/src/modules/create-one/create-one-controller.mixin.js +5 -5
- package/src/modules/create-one/create-one.helper.d.ts +1 -1
- package/src/modules/create-one/create-one.helper.js +8 -7
- package/src/modules/create-one/create-one.module.d.ts +2 -2
- package/src/modules/create-one/create-one.module.js +2 -2
- package/src/modules/delete-many/base-delete-many.service.d.ts +34 -0
- package/src/modules/delete-many/base-delete-many.service.js +29 -0
- package/src/modules/delete-many/delete-many-controller.interface.d.ts +8 -0
- package/src/modules/delete-many/delete-many-controller.interface.js +2 -0
- package/src/modules/delete-many/delete-many-controller.mixin.d.ts +6 -0
- package/src/modules/delete-many/delete-many-controller.mixin.js +54 -0
- package/src/modules/delete-many/delete-many-service.interface.d.ts +6 -0
- package/src/modules/delete-many/delete-many-service.interface.js +2 -0
- package/src/modules/delete-many/delete-many.helper.d.ts +7 -0
- package/src/modules/delete-many/delete-many.helper.js +69 -0
- package/src/modules/delete-many/delete-many.module.d.ts +6 -0
- package/src/modules/delete-many/delete-many.module.js +28 -0
- package/src/modules/delete-many/delete-many.presenter.d.ts +3 -0
- package/src/modules/delete-many/delete-many.presenter.js +20 -0
- package/src/modules/delete-many/index.d.ts +7 -0
- package/src/modules/delete-many/index.js +23 -0
- package/src/modules/delete-one/delete-one-controller.mixin.js +5 -5
- package/src/modules/delete-one/delete-one.helper.d.ts +1 -1
- package/src/modules/delete-one/delete-one.helper.js +8 -7
- package/src/modules/delete-one/delete-one.module.d.ts +2 -2
- package/src/modules/delete-one/delete-one.module.js +2 -2
- package/src/modules/duplicate-many/base-duplicate-many.service.d.ts +33 -0
- package/src/modules/duplicate-many/base-duplicate-many.service.js +43 -0
- package/src/modules/duplicate-many/duplicate-many-controller.interface.d.ts +7 -0
- package/src/modules/duplicate-many/duplicate-many-controller.interface.js +2 -0
- package/src/modules/duplicate-many/duplicate-many-controller.mixin.d.ts +6 -0
- package/src/modules/duplicate-many/duplicate-many-controller.mixin.js +63 -0
- package/src/modules/duplicate-many/duplicate-many-service.interface.d.ts +5 -0
- package/src/modules/duplicate-many/duplicate-many-service.interface.js +2 -0
- package/src/modules/duplicate-many/duplicate-many.helper.d.ts +7 -0
- package/src/modules/duplicate-many/duplicate-many.helper.js +69 -0
- package/src/modules/duplicate-many/duplicate-many.module.d.ts +6 -0
- package/src/modules/duplicate-many/duplicate-many.module.js +28 -0
- package/src/modules/duplicate-many/index.d.ts +6 -0
- package/src/modules/duplicate-many/index.js +22 -0
- package/src/modules/duplicate-one/duplicate-one-controller.mixin.js +6 -6
- package/src/modules/duplicate-one/duplicate-one.helper.d.ts +1 -1
- package/src/modules/duplicate-one/duplicate-one.helper.js +8 -7
- package/src/modules/duplicate-one/duplicate-one.module.d.ts +2 -2
- package/src/modules/duplicate-one/duplicate-one.module.js +2 -2
- package/src/modules/get-many/get-many-controller.mixin.js +5 -5
- package/src/modules/get-many/get-many.helper.d.ts +1 -1
- package/src/modules/get-many/get-many.helper.js +8 -7
- package/src/modules/get-many/get-many.module.d.ts +2 -2
- package/src/modules/get-many/get-many.module.js +2 -2
- package/src/modules/get-one/get-one-controller.mixin.js +6 -6
- package/src/modules/get-one/get-one.helper.d.ts +1 -1
- package/src/modules/get-one/get-one.helper.js +8 -7
- package/src/modules/get-one/get-one.module.d.ts +2 -2
- package/src/modules/get-one/get-one.module.js +2 -2
- package/src/modules/replace-one/replace-one-controller.mixin.js +6 -6
- package/src/modules/replace-one/replace-one.helper.d.ts +1 -1
- package/src/modules/replace-one/replace-one.helper.js +8 -7
- package/src/modules/replace-one/replace-one.module.d.ts +2 -2
- package/src/modules/replace-one/replace-one.module.js +2 -2
- package/src/modules/update-many/base-update-many.service.d.ts +33 -0
- package/src/modules/update-many/base-update-many.service.js +32 -0
- package/src/modules/update-many/index.d.ts +6 -0
- package/src/modules/update-many/index.js +22 -0
- package/src/modules/update-many/update-many-controller.interface.d.ts +7 -0
- package/src/modules/update-many/update-many-controller.interface.js +2 -0
- package/src/modules/update-many/update-many-controller.mixin.d.ts +6 -0
- package/src/modules/update-many/update-many-controller.mixin.js +63 -0
- package/src/modules/update-many/update-many-service.interface.d.ts +5 -0
- package/src/modules/update-many/update-many-service.interface.js +2 -0
- package/src/modules/update-many/update-many.helper.d.ts +7 -0
- package/src/modules/update-many/update-many.helper.js +69 -0
- package/src/modules/update-many/update-many.module.d.ts +6 -0
- package/src/modules/update-many/update-many.module.js +28 -0
- package/src/modules/update-one/update-one-controller.mixin.js +6 -6
- package/src/modules/update-one/update-one.helper.d.ts +1 -1
- package/src/modules/update-one/update-one.helper.js +8 -7
- package/src/modules/update-one/update-one.module.d.ts +2 -2
- package/src/modules/update-one/update-one.module.js +2 -2
- package/src/version.json +1 -1
- 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;
|
package/src/helpers/index.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
export * from './
|
|
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';
|
package/src/helpers/index.js
CHANGED
|
@@ -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("./
|
|
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,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;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = '/
|
|
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
|
-
|
|
81
|
-
|
|
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,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?:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
46
|
-
options
|
|
47
|
-
securityName
|
|
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
|
-
|
|
56
|
-
|
|
66
|
+
swaggerExtraConfig?: DynamicAPISwaggerExtraConfig;
|
|
67
|
+
swaggerDocumentOptions?: SwaggerDocumentOptions;
|
|
57
68
|
};
|
|
58
|
-
|
|
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 };
|
|
@@ -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 './
|
|
4
|
+
export * from './dynamic-api-swagger-options.type';
|
|
5
5
|
export * from './route-config.interface';
|
|
6
6
|
export * from './service-provider.interface';
|
package/src/interfaces/index.js
CHANGED
|
@@ -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("./
|
|
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 = '
|
|
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: `
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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: `
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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,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 };
|