mongodb-dynamic-api 1.2.1 → 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 +9 -0
- package/README.md +4 -3
- package/package.json +1 -1
- package/src/builders/route-decorators.builder.d.ts +1 -0
- package/src/builders/route-decorators.builder.js +13 -2
- 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.js +19 -3
- package/src/helpers/format.helper.d.ts +1 -0
- package/src/helpers/format.helper.js +5 -1
- package/src/helpers/route-description.helper.js +6 -0
- package/src/helpers/versioning-config.helper.d.ts +2 -1
- package/src/helpers/versioning-config.helper.js +5 -1
- package/src/interfaces/route-config.interface.d.ts +1 -1
- package/src/modules/create-many/create-many-controller.mixin.js +4 -4
- package/src/modules/create-many/create-many.helper.js +3 -2
- package/src/modules/create-one/create-one-controller.mixin.js +3 -3
- package/src/modules/create-one/create-one.helper.js +3 -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 +3 -3
- package/src/modules/delete-one/delete-one.helper.js +3 -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 +4 -4
- package/src/modules/duplicate-one/duplicate-one.helper.js +3 -2
- package/src/modules/get-many/get-many-controller.mixin.js +3 -3
- package/src/modules/get-many/get-many.helper.js +3 -2
- package/src/modules/get-one/get-one-controller.mixin.js +4 -4
- package/src/modules/get-one/get-one.helper.js +3 -2
- package/src/modules/replace-one/replace-one-controller.mixin.js +4 -4
- package/src/modules/replace-one/replace-one.helper.js +3 -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 +4 -4
- package/src/modules/update-one/update-one.helper.js +3 -2
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.2.1...v1.3.0) (2024-03-04)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### api
|
|
7
|
+
|
|
8
|
+
* **api:** add delete many route ([43a89cb](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/43a89cb4c087c468743559950fa232ff6e10c140))
|
|
9
|
+
* **api:** add duplicate many route ([be33d1b](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/be33d1b221d81c5ff6649cd2eccc331cb58459b9))
|
|
10
|
+
* **api:** add update many route ([7543eb9](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/7543eb92d7ba538f6d46b69ec194a6c44daff5b2))
|
|
11
|
+
|
|
3
12
|
## [1.2.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v1.2.0...v1.2.1) (2024-03-04)
|
|
4
13
|
|
|
5
14
|
|
package/README.md
CHANGED
|
@@ -100,7 +100,7 @@ import { DynamicApiModule } from 'mongodb-dynamic-api';
|
|
|
100
100
|
})
|
|
101
101
|
export class AppModule {}
|
|
102
102
|
```
|
|
103
|
-
**Basic
|
|
103
|
+
**Basic Usage**
|
|
104
104
|
|
|
105
105
|
- Ok, now let's add our first content with just 2 files. It will be a simple `User` with a `name` and an `email` field.
|
|
106
106
|
- We use the `@Schema` and `@Prop` decorators from the `@nestjs/mongoose` package to define our MongoDB model.
|
|
@@ -331,8 +331,9 @@ The `enableDynamicAPIVersioning` function will automatically add versioning to t
|
|
|
331
331
|
**Usage**
|
|
332
332
|
|
|
333
333
|
Pass the `version` property to the `controllerOptions` object or to the `route` object in the `DynamicApiModule.forFeature` method.
|
|
334
|
+
<br>*If the version is specified in 2, the version specified in the route will have priority.*
|
|
334
335
|
|
|
335
|
-
|
|
336
|
+
Let's add a new version to the `User` content.
|
|
336
337
|
|
|
337
338
|
```typescript
|
|
338
339
|
// create-one-user-v2.dto.ts
|
|
@@ -406,7 +407,7 @@ import { UserV2Presenter } from './user-v2.presenter';
|
|
|
406
407
|
export class UsersModule {}
|
|
407
408
|
```
|
|
408
409
|
|
|
409
|
-
Great, now you have a versioned User API, and you can access it at the `/v1/users` and `/v2/users`
|
|
410
|
+
Great, now you have a versioned User API, and you can access it at the `/v1/users` and `/v2/users` paths.
|
|
410
411
|
|
|
411
412
|

|
|
412
413
|
|
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@ declare class RouteDecoratorsBuilder<Entity extends BaseEntity> {
|
|
|
11
11
|
private readonly body?;
|
|
12
12
|
private readonly presenter?;
|
|
13
13
|
private readonly responseRouteTypeIsArray;
|
|
14
|
+
private readonly bodyRouteTypeIsOptional;
|
|
14
15
|
constructor(routeType: RouteType, entity: Type<Entity>, version?: string, description?: string, param?: Type, query?: Type, body?: Type, presenter?: Type);
|
|
15
16
|
build(): MethodDecorator[];
|
|
16
17
|
private getRouteDecorators;
|
|
@@ -17,6 +17,11 @@ class RouteDecoratorsBuilder {
|
|
|
17
17
|
this.responseRouteTypeIsArray = [
|
|
18
18
|
'GetMany',
|
|
19
19
|
'CreateMany',
|
|
20
|
+
'DuplicateMany',
|
|
21
|
+
];
|
|
22
|
+
this.bodyRouteTypeIsOptional = [
|
|
23
|
+
'DuplicateOne',
|
|
24
|
+
'DuplicateMany',
|
|
20
25
|
];
|
|
21
26
|
}
|
|
22
27
|
build() {
|
|
@@ -36,12 +41,18 @@ class RouteDecoratorsBuilder {
|
|
|
36
41
|
return [(0, common_1.Post)('many')];
|
|
37
42
|
case 'CreateOne':
|
|
38
43
|
return [(0, common_1.Post)()];
|
|
44
|
+
case 'UpdateMany':
|
|
45
|
+
return [(0, common_1.Patch)()];
|
|
39
46
|
case 'UpdateOne':
|
|
40
47
|
return [(0, common_1.Patch)(`:${paramKey}`)];
|
|
41
48
|
case 'ReplaceOne':
|
|
42
49
|
return [(0, common_1.Put)(`:${paramKey}`)];
|
|
50
|
+
case 'DuplicateMany':
|
|
51
|
+
return [(0, common_1.Post)(`duplicate`)];
|
|
43
52
|
case 'DuplicateOne':
|
|
44
|
-
return [(0, common_1.Post)(
|
|
53
|
+
return [(0, common_1.Post)(`duplicate/:${paramKey}`)];
|
|
54
|
+
case 'DeleteMany':
|
|
55
|
+
return [(0, common_1.Delete)()];
|
|
45
56
|
case 'DeleteOne':
|
|
46
57
|
return [(0, common_1.Delete)(`:${paramKey}`)];
|
|
47
58
|
default:
|
|
@@ -61,7 +72,7 @@ class RouteDecoratorsBuilder {
|
|
|
61
72
|
}),
|
|
62
73
|
...(this.body ? [(0, swagger_1.ApiBody)({
|
|
63
74
|
type: this.body,
|
|
64
|
-
|
|
75
|
+
required: !this.bodyRouteTypeIsOptional.includes(this.routeType),
|
|
65
76
|
})] : []),
|
|
66
77
|
...(this.param && paramKey
|
|
67
78
|
? [
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DeleteManyEntityQuery = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class DeleteManyEntityQuery {
|
|
16
|
+
}
|
|
17
|
+
exports.DeleteManyEntityQuery = DeleteManyEntityQuery;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, swagger_1.ApiProperty)({ type: [String], minItems: 1 }),
|
|
20
|
+
(0, class_validator_1.IsNotEmpty)({ each: true }),
|
|
21
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
22
|
+
(0, class_validator_1.ArrayMinSize)(1),
|
|
23
|
+
__metadata("design:type", Array)
|
|
24
|
+
], DeleteManyEntityQuery.prototype, "ids", void 0);
|
package/src/dtos/index.d.ts
CHANGED
package/src/dtos/index.js
CHANGED
|
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./delete-many-entity.query"), exports);
|
|
17
18
|
__exportStar(require("./entity.param"), exports);
|
|
18
19
|
__exportStar(require("./entity.query"), exports);
|
|
@@ -13,6 +13,9 @@ const mongoose_1 = require("@nestjs/mongoose");
|
|
|
13
13
|
const decorators_1 = require("./decorators");
|
|
14
14
|
const helpers_1 = require("./helpers");
|
|
15
15
|
const modules_1 = require("./modules");
|
|
16
|
+
const delete_many_1 = require("./modules/delete-many");
|
|
17
|
+
const duplicate_many_1 = require("./modules/duplicate-many");
|
|
18
|
+
const update_many_1 = require("./modules/update-many");
|
|
16
19
|
let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
17
20
|
static forRoot(uri) {
|
|
18
21
|
if (!uri) {
|
|
@@ -46,9 +49,12 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
46
49
|
{ type: 'GetOne' },
|
|
47
50
|
{ type: 'CreateMany' },
|
|
48
51
|
{ type: 'CreateOne' },
|
|
49
|
-
{ type: '
|
|
52
|
+
{ type: 'UpdateMany' },
|
|
50
53
|
{ type: 'UpdateOne' },
|
|
54
|
+
{ type: 'ReplaceOne' },
|
|
55
|
+
{ type: 'DuplicateMany' },
|
|
51
56
|
{ type: 'DuplicateOne' },
|
|
57
|
+
{ type: 'DeleteMany' },
|
|
52
58
|
{ type: 'DeleteOne' },
|
|
53
59
|
];
|
|
54
60
|
}
|
|
@@ -65,9 +71,15 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
65
71
|
case 'CreateOne':
|
|
66
72
|
module = modules_1.CreateOneModule;
|
|
67
73
|
break;
|
|
74
|
+
case 'DeleteMany':
|
|
75
|
+
module = delete_many_1.DeleteManyModule;
|
|
76
|
+
break;
|
|
68
77
|
case 'DeleteOne':
|
|
69
78
|
module = modules_1.DeleteOneModule;
|
|
70
79
|
break;
|
|
80
|
+
case 'DuplicateMany':
|
|
81
|
+
module = duplicate_many_1.DuplicateManyModule;
|
|
82
|
+
break;
|
|
71
83
|
case 'DuplicateOne':
|
|
72
84
|
module = modules_1.DuplicateOneModule;
|
|
73
85
|
break;
|
|
@@ -80,6 +92,9 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
80
92
|
case 'ReplaceOne':
|
|
81
93
|
module = modules_1.ReplaceOneModule;
|
|
82
94
|
break;
|
|
95
|
+
case 'UpdateMany':
|
|
96
|
+
module = update_many_1.UpdateManyModule;
|
|
97
|
+
break;
|
|
83
98
|
case 'UpdateOne':
|
|
84
99
|
module = modules_1.UpdateOneModule;
|
|
85
100
|
break;
|
|
@@ -88,10 +103,11 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
88
103
|
}
|
|
89
104
|
const description = routeDescription ?? (0, helpers_1.getDefaultRouteDescription)(type, entity.name);
|
|
90
105
|
const version = routeVersion ?? controllerVersion;
|
|
91
|
-
if (version
|
|
106
|
+
if (version && !(0, helpers_1.isValidVersion)(version)) {
|
|
92
107
|
throw new Error(`Invalid version ${version} for ${type} route. Version must be a string that matches numeric format, e.g. 1, 2, 3, ..., 99.`);
|
|
93
108
|
}
|
|
94
|
-
|
|
109
|
+
const validationPipeOptions = routeValidationPipeOptions ?? controllerValidationPipeOptions;
|
|
110
|
+
return module.forFeature(databaseModule, entity, { path, apiTag }, { description, dTOs }, version, validationPipeOptions);
|
|
95
111
|
})
|
|
96
112
|
.filter((module) => module),
|
|
97
113
|
],
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pascalCase = void 0;
|
|
3
|
+
exports.isValidVersion = exports.pascalCase = void 0;
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
5
|
function pascalCase(str) {
|
|
6
6
|
return str ? (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(str)) : undefined;
|
|
7
7
|
}
|
|
8
8
|
exports.pascalCase = pascalCase;
|
|
9
|
+
function isValidVersion(version) {
|
|
10
|
+
return /^\d+$/.test(version);
|
|
11
|
+
}
|
|
12
|
+
exports.isValidVersion = isValidVersion;
|
|
@@ -9,8 +9,12 @@ function getDefaultRouteDescription(routeType, entityName) {
|
|
|
9
9
|
return `Create many ${contentName}`;
|
|
10
10
|
case 'CreateOne':
|
|
11
11
|
return `Create one ${contentName}`;
|
|
12
|
+
case 'DeleteMany':
|
|
13
|
+
return `Delete many ${contentName}`;
|
|
12
14
|
case 'DeleteOne':
|
|
13
15
|
return `Delete one ${contentName}`;
|
|
16
|
+
case 'DuplicateMany':
|
|
17
|
+
return `Duplicate many ${contentName}`;
|
|
14
18
|
case 'DuplicateOne':
|
|
15
19
|
return `Duplicate one ${contentName}`;
|
|
16
20
|
case 'GetMany':
|
|
@@ -19,6 +23,8 @@ function getDefaultRouteDescription(routeType, entityName) {
|
|
|
19
23
|
return `Get one ${contentName} by id`;
|
|
20
24
|
case 'ReplaceOne':
|
|
21
25
|
return `Replace one ${contentName}`;
|
|
26
|
+
case 'UpdateMany':
|
|
27
|
+
return `Update many ${contentName}`;
|
|
22
28
|
case 'UpdateOne':
|
|
23
29
|
return `Update one ${contentName}`;
|
|
24
30
|
default:
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { INestApplication, VersioningOptions } from '@nestjs/common';
|
|
2
2
|
declare function enableDynamicAPIVersioning(app: INestApplication, options?: VersioningOptions): void;
|
|
3
|
-
|
|
3
|
+
declare function addVersionSuffix(version?: string): string;
|
|
4
|
+
export { addVersionSuffix, enableDynamicAPIVersioning };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.enableDynamicAPIVersioning = void 0;
|
|
3
|
+
exports.enableDynamicAPIVersioning = exports.addVersionSuffix = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
function enableDynamicAPIVersioning(app, options) {
|
|
6
6
|
app.enableVersioning({
|
|
@@ -9,3 +9,7 @@ function enableDynamicAPIVersioning(app, options) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
exports.enableDynamicAPIVersioning = enableDynamicAPIVersioning;
|
|
12
|
+
function addVersionSuffix(version) {
|
|
13
|
+
return version ? `V${version}` : '';
|
|
14
|
+
}
|
|
15
|
+
exports.addVersionSuffix = addVersionSuffix;
|
|
@@ -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;
|
|
@@ -26,7 +26,7 @@ function CreateManyControllerMixin(entity, path, apiTag, version, description, D
|
|
|
26
26
|
class DtoBody extends (0, mixins_1.EntityBodyMixin)(entity) {
|
|
27
27
|
}
|
|
28
28
|
Object.defineProperty(DtoBody, 'name', {
|
|
29
|
-
value: `${displayedName}${
|
|
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}${
|
|
46
|
+
value: `CreateMany${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Dto`,
|
|
47
47
|
writable: false,
|
|
48
48
|
});
|
|
49
49
|
}
|
|
@@ -51,7 +51,7 @@ function CreateManyControllerMixin(entity, path, apiTag, version, description, D
|
|
|
51
51
|
}
|
|
52
52
|
if (!CustomPresenter) {
|
|
53
53
|
Object.defineProperty(RoutePresenter, 'name', {
|
|
54
|
-
value: `${displayedName}${
|
|
54
|
+
value: `${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Presenter`,
|
|
55
55
|
writable: false,
|
|
56
56
|
});
|
|
57
57
|
}
|
|
@@ -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: `BaseCreateMany${entity.name}${
|
|
76
|
+
value: `BaseCreateMany${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
|
|
77
77
|
writable: false,
|
|
78
78
|
});
|
|
79
79
|
return BaseCreateManyController;
|
|
@@ -18,10 +18,11 @@ 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
24
|
function provideServiceName(entityName, version) {
|
|
24
|
-
return `CreateMany${entityName}${
|
|
25
|
+
return `CreateMany${entityName}${(0, helpers_1.addVersionSuffix)(version)}Service`;
|
|
25
26
|
}
|
|
26
27
|
function createCreateManyServiceProvider(entity, version) {
|
|
27
28
|
let CreateManyService = class CreateManyService extends base_create_many_service_1.BaseCreateManyService {
|
|
@@ -60,7 +61,7 @@ function createCreateManyController(entity, path, apiTag, version, description,
|
|
|
60
61
|
__metadata("design:paramtypes", [Object])
|
|
61
62
|
], CreateManyController);
|
|
62
63
|
Object.defineProperty(CreateManyController, 'name', {
|
|
63
|
-
value: `CreateMany${entity.name}${
|
|
64
|
+
value: `CreateMany${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
|
|
64
65
|
writable: false,
|
|
65
66
|
});
|
|
66
67
|
return CreateManyController;
|
|
@@ -24,7 +24,7 @@ function CreateOneControllerMixin(entity, path, apiTag, version, description, DT
|
|
|
24
24
|
}
|
|
25
25
|
if (!CustomBody) {
|
|
26
26
|
Object.defineProperty(RouteBody, 'name', {
|
|
27
|
-
value: `CreateOne${displayedName}${
|
|
27
|
+
value: `CreateOne${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Dto`,
|
|
28
28
|
writable: false,
|
|
29
29
|
});
|
|
30
30
|
}
|
|
@@ -32,7 +32,7 @@ function CreateOneControllerMixin(entity, path, apiTag, version, description, DT
|
|
|
32
32
|
}
|
|
33
33
|
if (!CustomPresenter) {
|
|
34
34
|
Object.defineProperty(RoutePresenter, 'name', {
|
|
35
|
-
value: `${displayedName}${
|
|
35
|
+
value: `${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Presenter`,
|
|
36
36
|
writable: false,
|
|
37
37
|
});
|
|
38
38
|
}
|
|
@@ -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: `BaseCreateOne${entity.name}${
|
|
57
|
+
value: `BaseCreateOne${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
|
|
58
58
|
writable: false,
|
|
59
59
|
});
|
|
60
60
|
return BaseCreateOneController;
|
|
@@ -18,10 +18,11 @@ 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
24
|
function provideServiceName(entityName, version) {
|
|
24
|
-
return `CreateOne${entityName}${
|
|
25
|
+
return `CreateOne${entityName}${(0, helpers_1.addVersionSuffix)(version)}Service`;
|
|
25
26
|
}
|
|
26
27
|
function createCreateOneServiceProvider(entity, version) {
|
|
27
28
|
let CreateOneService = class CreateOneService extends base_create_one_service_1.BaseCreateOneService {
|
|
@@ -60,7 +61,7 @@ function createCreateOneController(entity, path, apiTag, version, description, D
|
|
|
60
61
|
__metadata("design:paramtypes", [Object])
|
|
61
62
|
], CreateOneController);
|
|
62
63
|
Object.defineProperty(CreateOneController, 'name', {
|
|
63
|
-
value: `CreateOne${entity.name}${
|
|
64
|
+
value: `CreateOne${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
|
|
64
65
|
writable: false,
|
|
65
66
|
});
|
|
66
67
|
return CreateOneController;
|
|
@@ -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 };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.DeleteManyControllerMixin = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const builders_1 = require("../../builders");
|
|
18
|
+
const helpers_1 = require("../../helpers");
|
|
19
|
+
const delete_many_presenter_1 = require("./delete-many.presenter");
|
|
20
|
+
function DeleteManyControllerMixin(entity, path, apiTag, version, description, DTOs) {
|
|
21
|
+
const displayedName = (0, helpers_1.pascalCase)(apiTag) ?? entity.name;
|
|
22
|
+
const { presenter: CustomPresenter } = DTOs ?? {};
|
|
23
|
+
class RoutePresenter extends (CustomPresenter ?? delete_many_presenter_1.DeleteManyPresenter) {
|
|
24
|
+
}
|
|
25
|
+
if (!CustomPresenter) {
|
|
26
|
+
Object.defineProperty(RoutePresenter, 'name', {
|
|
27
|
+
value: `DeleteMany${displayedName}${(0, helpers_1.addVersionSuffix)(version)}Presenter`,
|
|
28
|
+
writable: false,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder('DeleteMany', entity, version, description, undefined, undefined, undefined, RoutePresenter);
|
|
32
|
+
class BaseDeleteManyController {
|
|
33
|
+
constructor(service) {
|
|
34
|
+
this.service = service;
|
|
35
|
+
this.entity = entity;
|
|
36
|
+
}
|
|
37
|
+
async deleteMany(ids) {
|
|
38
|
+
return this.service.deleteMany(ids);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
43
|
+
__param(0, (0, common_1.Query)('ids')),
|
|
44
|
+
__metadata("design:type", Function),
|
|
45
|
+
__metadata("design:paramtypes", [Array]),
|
|
46
|
+
__metadata("design:returntype", Promise)
|
|
47
|
+
], BaseDeleteManyController.prototype, "deleteMany", null);
|
|
48
|
+
Object.defineProperty(BaseDeleteManyController, 'name', {
|
|
49
|
+
value: `BaseDeleteMany${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
|
|
50
|
+
writable: false,
|
|
51
|
+
});
|
|
52
|
+
return BaseDeleteManyController;
|
|
53
|
+
}
|
|
54
|
+
exports.DeleteManyControllerMixin = DeleteManyControllerMixin;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
+
import { DTOsBundle, ServiceProvider } from '../../interfaces';
|
|
3
|
+
import { BaseEntity } from '../../models';
|
|
4
|
+
import { DeleteManyControllerConstructor } from './delete-many-controller.interface';
|
|
5
|
+
declare function createDeleteManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): ServiceProvider;
|
|
6
|
+
declare function createDeleteManyController<Entity extends BaseEntity>(entity: Type<Entity>, path: string, apiTag?: string, version?: string, description?: string, DTOs?: DTOsBundle, validationPipeOptions?: ValidationPipeOptions): DeleteManyControllerConstructor<Entity>;
|
|
7
|
+
export { createDeleteManyController, createDeleteManyServiceProvider };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.createDeleteManyServiceProvider = exports.createDeleteManyController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
19
|
+
const mongoose_2 = require("mongoose");
|
|
20
|
+
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
21
|
+
const helpers_1 = require("../../helpers");
|
|
22
|
+
const base_delete_many_service_1 = require("./base-delete-many.service");
|
|
23
|
+
const delete_many_controller_mixin_1 = require("./delete-many-controller.mixin");
|
|
24
|
+
function provideServiceName(entityName, version) {
|
|
25
|
+
return `DeleteMany${entityName}${(0, helpers_1.addVersionSuffix)(version)}Service`;
|
|
26
|
+
}
|
|
27
|
+
function createDeleteManyServiceProvider(entity, version) {
|
|
28
|
+
let DeleteManyService = class DeleteManyService extends base_delete_many_service_1.BaseDeleteManyService {
|
|
29
|
+
constructor(model) {
|
|
30
|
+
super(model);
|
|
31
|
+
this.model = model;
|
|
32
|
+
this.entity = entity;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
DeleteManyService = __decorate([
|
|
36
|
+
__param(0, (0, mongoose_1.InjectModel)(entity.name, dynamic_api_module_1.DynamicApiModule.connectionName)),
|
|
37
|
+
__metadata("design:paramtypes", [mongoose_2.Model])
|
|
38
|
+
], DeleteManyService);
|
|
39
|
+
Object.defineProperty(DeleteManyService, 'name', {
|
|
40
|
+
value: provideServiceName(entity.name, version),
|
|
41
|
+
writable: false,
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
provide: provideServiceName(entity.name, version),
|
|
45
|
+
useClass: DeleteManyService,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.createDeleteManyServiceProvider = createDeleteManyServiceProvider;
|
|
49
|
+
function createDeleteManyController(entity, path, apiTag, version, description, DTOs, validationPipeOptions) {
|
|
50
|
+
let DeleteManyController = class DeleteManyController extends (0, delete_many_controller_mixin_1.DeleteManyControllerMixin)(entity, path, apiTag, version, description, DTOs) {
|
|
51
|
+
constructor(service) {
|
|
52
|
+
super(service);
|
|
53
|
+
this.service = service;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
DeleteManyController = __decorate([
|
|
57
|
+
(0, common_1.Controller)({ path, version }),
|
|
58
|
+
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
59
|
+
(0, common_1.UsePipes)(new common_1.ValidationPipe(validationPipeOptions ?? { transform: true })),
|
|
60
|
+
__param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
|
|
61
|
+
__metadata("design:paramtypes", [Object])
|
|
62
|
+
], DeleteManyController);
|
|
63
|
+
Object.defineProperty(DeleteManyController, 'name', {
|
|
64
|
+
value: `DeleteMany${entity.name}${(0, helpers_1.addVersionSuffix)(version)}Controller`,
|
|
65
|
+
writable: false,
|
|
66
|
+
});
|
|
67
|
+
return DeleteManyController;
|
|
68
|
+
}
|
|
69
|
+
exports.createDeleteManyController = createDeleteManyController;
|