mongodb-dynamic-api 2.1.10 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/package.json +1 -1
- package/src/decorators/index.d.ts +1 -0
- package/src/decorators/index.js +1 -0
- package/src/decorators/validator-pipe.decorator.d.ts +3 -0
- package/src/decorators/validator-pipe.decorator.js +8 -0
- package/src/dynamic-api.module.d.ts +2 -2
- package/src/dynamic-api.module.js +26 -32
- package/src/helpers/format.helper.d.ts +2 -2
- package/src/helpers/format.helper.js +5 -2
- package/src/helpers/schema.helper.js +2 -3
- package/src/interfaces/dynamic-api-controller-options.interface.d.ts +2 -0
- package/src/interfaces/dynamic-api-global-state.interface.d.ts +35 -3
- package/src/interfaces/dynamic-api-options.interface.d.ts +4 -2
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +2 -0
- package/src/interfaces/dynamic-api-service-callback.interface.d.ts +28 -0
- package/src/interfaces/dynamic-api-service-callback.interface.js +2 -0
- package/src/interfaces/index.d.ts +1 -0
- package/src/interfaces/index.js +1 -0
- package/src/mixins/create-policies-guard.mixin.js +2 -2
- package/src/modules/auth/auth.helper.d.ts +4 -4
- package/src/modules/auth/auth.helper.js +6 -5
- package/src/modules/auth/auth.module.d.ts +1 -1
- package/src/modules/auth/auth.module.js +3 -3
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +22 -14
- package/src/modules/auth/services/base-auth.service.d.ts +4 -3
- package/src/modules/auth/services/base-auth.service.js +16 -5
- package/src/routes/create-many/base-create-many.service.d.ts +2 -0
- package/src/routes/create-many/base-create-many.service.js +7 -2
- package/src/routes/create-many/create-many.helper.d.ts +2 -2
- package/src/routes/create-many/create-many.helper.js +7 -9
- package/src/routes/create-many/create-many.module.js +1 -1
- package/src/routes/create-one/base-create-one.service.d.ts +2 -0
- package/src/routes/create-one/base-create-one.service.js +3 -1
- package/src/routes/create-one/create-one.helper.d.ts +2 -2
- package/src/routes/create-one/create-one.helper.js +7 -9
- package/src/routes/create-one/create-one.module.js +1 -1
- package/src/routes/delete-many/delete-many.helper.js +6 -8
- package/src/routes/delete-one/delete-one.helper.js +6 -8
- package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +2 -0
- package/src/routes/duplicate-many/base-duplicate-many.service.js +3 -1
- package/src/routes/duplicate-many/duplicate-many.helper.d.ts +2 -2
- package/src/routes/duplicate-many/duplicate-many.helper.js +8 -9
- package/src/routes/duplicate-many/duplicate-many.module.js +1 -1
- package/src/routes/duplicate-one/base-duplicate-one.service.d.ts +2 -0
- package/src/routes/duplicate-one/base-duplicate-one.service.js +3 -1
- package/src/routes/duplicate-one/duplicate-one.helper.d.ts +2 -2
- package/src/routes/duplicate-one/duplicate-one.helper.js +8 -9
- package/src/routes/duplicate-one/duplicate-one.module.js +1 -1
- package/src/routes/get-many/base-get-many.service.d.ts +2 -0
- package/src/routes/get-many/base-get-many.service.js +3 -0
- package/src/routes/get-many/get-many.helper.d.ts +2 -2
- package/src/routes/get-many/get-many.helper.js +8 -9
- package/src/routes/get-many/get-many.module.js +1 -1
- package/src/routes/get-one/base-get-one.service.d.ts +2 -0
- package/src/routes/get-one/base-get-one.service.js +3 -0
- package/src/routes/get-one/get-one.helper.d.ts +2 -2
- package/src/routes/get-one/get-one.helper.js +8 -9
- package/src/routes/get-one/get-one.module.js +1 -1
- package/src/routes/replace-one/base-replace-one.service.d.ts +2 -0
- package/src/routes/replace-one/base-replace-one.service.js +3 -1
- package/src/routes/replace-one/replace-one.helper.d.ts +2 -2
- package/src/routes/replace-one/replace-one.helper.js +8 -9
- package/src/routes/replace-one/replace-one.module.js +1 -1
- package/src/routes/update-many/base-update-many.service.d.ts +2 -0
- package/src/routes/update-many/base-update-many.service.js +3 -1
- package/src/routes/update-many/update-many.helper.d.ts +2 -2
- package/src/routes/update-many/update-many.helper.js +8 -9
- package/src/routes/update-many/update-many.module.js +1 -1
- package/src/routes/update-one/base-update-one.service.d.ts +2 -0
- package/src/routes/update-one/base-update-one.service.js +3 -1
- package/src/routes/update-one/update-one.helper.d.ts +2 -2
- package/src/routes/update-one/update-one.helper.js +8 -9
- package/src/routes/update-one/update-one.module.js +1 -1
- package/src/services/base/base.service.js +3 -1
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +30 -1
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +37 -4
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
-
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
|
|
2
|
+
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { GetOneControllerConstructor } from './get-one-controller.interface';
|
|
5
|
-
declare function createGetOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
|
|
5
|
+
declare function createGetOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
|
|
6
6
|
declare function createGetOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): GetOneControllerConstructor<Entity>;
|
|
7
7
|
export { createGetOneController, createGetOneServiceProvider };
|
|
@@ -17,19 +17,18 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
18
|
const swagger_1 = require("@nestjs/swagger");
|
|
19
19
|
const mongoose_2 = require("mongoose");
|
|
20
|
+
const decorators_1 = require("../../decorators");
|
|
20
21
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
21
22
|
const helpers_1 = require("../../helpers");
|
|
22
23
|
const base_get_one_service_1 = require("./base-get-one.service");
|
|
23
24
|
const get_one_controller_mixin_1 = require("./get-one-controller.mixin");
|
|
24
|
-
function
|
|
25
|
-
return `${(0, helpers_1.getNamePrefix)('GetOne', entityName, version)}Service`;
|
|
26
|
-
}
|
|
27
|
-
function createGetOneServiceProvider(entity, version) {
|
|
25
|
+
function createGetOneServiceProvider(entity, version, callback) {
|
|
28
26
|
let GetOneService = class GetOneService extends base_get_one_service_1.BaseGetOneService {
|
|
29
27
|
constructor(model) {
|
|
30
28
|
super(model);
|
|
31
29
|
this.model = model;
|
|
32
30
|
this.entity = entity;
|
|
31
|
+
this.callback = callback;
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
34
|
GetOneService = __decorate([
|
|
@@ -37,11 +36,11 @@ function createGetOneServiceProvider(entity, version) {
|
|
|
37
36
|
__metadata("design:paramtypes", [mongoose_2.Model])
|
|
38
37
|
], GetOneService);
|
|
39
38
|
Object.defineProperty(GetOneService, 'name', {
|
|
40
|
-
value:
|
|
39
|
+
value: (0, helpers_1.provideName)('GetOne', entity.name, version, 'Service'),
|
|
41
40
|
writable: false,
|
|
42
41
|
});
|
|
43
42
|
return {
|
|
44
|
-
provide:
|
|
43
|
+
provide: (0, helpers_1.provideName)('GetOne', entity.name, version, 'Service'),
|
|
45
44
|
useClass: GetOneService,
|
|
46
45
|
};
|
|
47
46
|
}
|
|
@@ -57,13 +56,13 @@ function createGetOneController(entity, controllerOptions, routeConfig, version,
|
|
|
57
56
|
GetOneController = __decorate([
|
|
58
57
|
(0, common_1.Controller)({ path, version }),
|
|
59
58
|
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
60
|
-
(0,
|
|
59
|
+
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
61
60
|
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
62
|
-
__param(0, (0, common_1.Inject)(
|
|
61
|
+
__param(0, (0, common_1.Inject)((0, helpers_1.provideName)('GetOne', entity.name, version, 'Service'))),
|
|
63
62
|
__metadata("design:paramtypes", [Object])
|
|
64
63
|
], GetOneController);
|
|
65
64
|
Object.defineProperty(GetOneController, 'name', {
|
|
66
|
-
value: `${(0, helpers_1.
|
|
65
|
+
value: `${(0, helpers_1.provideName)('GetOne', entity.name, version, 'Controller')}`,
|
|
67
66
|
writable: false,
|
|
68
67
|
});
|
|
69
68
|
return GetOneController;
|
|
@@ -13,7 +13,7 @@ const get_one_helper_1 = require("./get-one.helper");
|
|
|
13
13
|
let GetOneModule = GetOneModule_1 = class GetOneModule {
|
|
14
14
|
static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
|
|
15
15
|
const controller = (0, get_one_helper_1.createGetOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
|
|
16
|
-
const ServiceProvider = (0, get_one_helper_1.createGetOneServiceProvider)(entity, version);
|
|
16
|
+
const ServiceProvider = (0, get_one_helper_1.createGetOneServiceProvider)(entity, version, routeConfig.callback);
|
|
17
17
|
return {
|
|
18
18
|
module: GetOneModule_1,
|
|
19
19
|
imports: [databaseModule],
|
|
@@ -23,11 +23,13 @@
|
|
|
23
23
|
/// <reference types="mongoose/types/virtuals" />
|
|
24
24
|
/// <reference types="mongoose/types/inferschematype" />
|
|
25
25
|
import { Model } from 'mongoose';
|
|
26
|
+
import { DynamicApiServiceCallback } from '../../interfaces';
|
|
26
27
|
import { BaseEntity } from '../../models';
|
|
27
28
|
import { BaseService } from '../../services';
|
|
28
29
|
import { ReplaceOneService } from './replace-one-service.interface';
|
|
29
30
|
export declare abstract class BaseReplaceOneService<Entity extends BaseEntity> extends BaseService<Entity> implements ReplaceOneService<Entity> {
|
|
30
31
|
protected readonly model: Model<Entity>;
|
|
32
|
+
protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
|
|
31
33
|
protected constructor(model: Model<Entity>);
|
|
32
34
|
replaceOne(id: string, partial: Partial<Entity>): Promise<Entity>;
|
|
33
35
|
}
|
|
@@ -22,11 +22,13 @@ class BaseReplaceOneService extends services_1.BaseService {
|
|
|
22
22
|
if (!document) {
|
|
23
23
|
this.handleDocumentNotFound();
|
|
24
24
|
}
|
|
25
|
+
if (this.callback) {
|
|
26
|
+
await this.callback(document, this.model);
|
|
27
|
+
}
|
|
25
28
|
return this.buildInstance(document);
|
|
26
29
|
}
|
|
27
30
|
catch (error) {
|
|
28
31
|
this.handleDuplicateKeyError(error);
|
|
29
|
-
throw error;
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
34
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
-
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
|
|
2
|
+
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { ReplaceOneControllerConstructor } from './replace-one-controller.interface';
|
|
5
|
-
declare function createReplaceOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
|
|
5
|
+
declare function createReplaceOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
|
|
6
6
|
declare function createReplaceOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): ReplaceOneControllerConstructor<Entity>;
|
|
7
7
|
export { createReplaceOneController, createReplaceOneServiceProvider };
|
|
@@ -17,19 +17,18 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
18
|
const swagger_1 = require("@nestjs/swagger");
|
|
19
19
|
const mongoose_2 = require("mongoose");
|
|
20
|
+
const decorators_1 = require("../../decorators");
|
|
20
21
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
21
22
|
const helpers_1 = require("../../helpers");
|
|
22
23
|
const base_replace_one_service_1 = require("./base-replace-one.service");
|
|
23
24
|
const replace_one_controller_mixin_1 = require("./replace-one-controller.mixin");
|
|
24
|
-
function
|
|
25
|
-
return `${(0, helpers_1.getNamePrefix)('ReplaceOne', entityName, version)}Service`;
|
|
26
|
-
}
|
|
27
|
-
function createReplaceOneServiceProvider(entity, version) {
|
|
25
|
+
function createReplaceOneServiceProvider(entity, version, callback) {
|
|
28
26
|
let ReplaceOneService = class ReplaceOneService extends base_replace_one_service_1.BaseReplaceOneService {
|
|
29
27
|
constructor(model) {
|
|
30
28
|
super(model);
|
|
31
29
|
this.model = model;
|
|
32
30
|
this.entity = entity;
|
|
31
|
+
this.callback = callback;
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
34
|
ReplaceOneService = __decorate([
|
|
@@ -37,11 +36,11 @@ function createReplaceOneServiceProvider(entity, version) {
|
|
|
37
36
|
__metadata("design:paramtypes", [mongoose_2.Model])
|
|
38
37
|
], ReplaceOneService);
|
|
39
38
|
Object.defineProperty(ReplaceOneService, 'name', {
|
|
40
|
-
value:
|
|
39
|
+
value: (0, helpers_1.provideName)('ReplaceOne', entity.name, version, 'Service'),
|
|
41
40
|
writable: false,
|
|
42
41
|
});
|
|
43
42
|
return {
|
|
44
|
-
provide:
|
|
43
|
+
provide: (0, helpers_1.provideName)('ReplaceOne', entity.name, version, 'Service'),
|
|
45
44
|
useClass: ReplaceOneService,
|
|
46
45
|
};
|
|
47
46
|
}
|
|
@@ -57,13 +56,13 @@ function createReplaceOneController(entity, controllerOptions, routeConfig, vers
|
|
|
57
56
|
ReplaceOneController = __decorate([
|
|
58
57
|
(0, common_1.Controller)({ path, version }),
|
|
59
58
|
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
60
|
-
(0,
|
|
59
|
+
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
61
60
|
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
62
|
-
__param(0, (0, common_1.Inject)(
|
|
61
|
+
__param(0, (0, common_1.Inject)((0, helpers_1.provideName)('ReplaceOne', entity.name, version, 'Service'))),
|
|
63
62
|
__metadata("design:paramtypes", [Object])
|
|
64
63
|
], ReplaceOneController);
|
|
65
64
|
Object.defineProperty(ReplaceOneController, 'name', {
|
|
66
|
-
value: `${(0, helpers_1.
|
|
65
|
+
value: `${(0, helpers_1.provideName)('ReplaceOne', entity.name, version, 'Controller')}`,
|
|
67
66
|
writable: false,
|
|
68
67
|
});
|
|
69
68
|
return ReplaceOneController;
|
|
@@ -13,7 +13,7 @@ const replace_one_helper_1 = require("./replace-one.helper");
|
|
|
13
13
|
let ReplaceOneModule = ReplaceOneModule_1 = class ReplaceOneModule {
|
|
14
14
|
static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
|
|
15
15
|
const controller = (0, replace_one_helper_1.createReplaceOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
|
|
16
|
-
const ServiceProvider = (0, replace_one_helper_1.createReplaceOneServiceProvider)(entity, version);
|
|
16
|
+
const ServiceProvider = (0, replace_one_helper_1.createReplaceOneServiceProvider)(entity, version, routeConfig.callback);
|
|
17
17
|
return {
|
|
18
18
|
module: ReplaceOneModule_1,
|
|
19
19
|
imports: [databaseModule],
|
|
@@ -23,11 +23,13 @@
|
|
|
23
23
|
/// <reference types="mongoose/types/virtuals" />
|
|
24
24
|
/// <reference types="mongoose/types/inferschematype" />
|
|
25
25
|
import { Model } from 'mongoose';
|
|
26
|
+
import { DynamicApiServiceCallback } from '../../interfaces';
|
|
26
27
|
import { BaseEntity } from '../../models';
|
|
27
28
|
import { BaseService } from '../../services';
|
|
28
29
|
import { UpdateManyService } from './update-many-service.interface';
|
|
29
30
|
export declare abstract class BaseUpdateManyService<Entity extends BaseEntity> extends BaseService<Entity> implements UpdateManyService<Entity> {
|
|
30
31
|
protected readonly model: Model<Entity>;
|
|
32
|
+
protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
|
|
31
33
|
protected constructor(model: Model<Entity>);
|
|
32
34
|
updateMany(ids: string[], partial: Partial<Entity>): Promise<Entity[]>;
|
|
33
35
|
}
|
|
@@ -21,11 +21,13 @@ class BaseUpdateManyService extends services_1.BaseService {
|
|
|
21
21
|
.lean()
|
|
22
22
|
.exec();
|
|
23
23
|
const documents = await this.model.find({ _id: { $in: ids } }).lean().exec();
|
|
24
|
+
if (this.callback && documents.length) {
|
|
25
|
+
await Promise.all(documents.map((document) => this.callback(document, this.model)));
|
|
26
|
+
}
|
|
24
27
|
return documents.map((d) => this.buildInstance(d));
|
|
25
28
|
}
|
|
26
29
|
catch (error) {
|
|
27
30
|
this.handleDuplicateKeyError(error);
|
|
28
|
-
throw error;
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
-
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
|
|
2
|
+
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { UpdateManyControllerConstructor } from './update-many-controller.interface';
|
|
5
|
-
declare function createUpdateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
|
|
5
|
+
declare function createUpdateManyServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
|
|
6
6
|
declare function createUpdateManyController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): UpdateManyControllerConstructor<Entity>;
|
|
7
7
|
export { createUpdateManyController, createUpdateManyServiceProvider };
|
|
@@ -17,19 +17,18 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
18
|
const swagger_1 = require("@nestjs/swagger");
|
|
19
19
|
const mongoose_2 = require("mongoose");
|
|
20
|
+
const decorators_1 = require("../../decorators");
|
|
20
21
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
21
22
|
const helpers_1 = require("../../helpers");
|
|
22
23
|
const base_update_many_service_1 = require("./base-update-many.service");
|
|
23
24
|
const update_many_controller_mixin_1 = require("./update-many-controller.mixin");
|
|
24
|
-
function
|
|
25
|
-
return `${(0, helpers_1.getNamePrefix)('UpdateMany', entityName, version)}Service`;
|
|
26
|
-
}
|
|
27
|
-
function createUpdateManyServiceProvider(entity, version) {
|
|
25
|
+
function createUpdateManyServiceProvider(entity, version, callback) {
|
|
28
26
|
let UpdateManyService = class UpdateManyService extends base_update_many_service_1.BaseUpdateManyService {
|
|
29
27
|
constructor(model) {
|
|
30
28
|
super(model);
|
|
31
29
|
this.model = model;
|
|
32
30
|
this.entity = entity;
|
|
31
|
+
this.callback = callback;
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
34
|
UpdateManyService = __decorate([
|
|
@@ -37,11 +36,11 @@ function createUpdateManyServiceProvider(entity, version) {
|
|
|
37
36
|
__metadata("design:paramtypes", [mongoose_2.Model])
|
|
38
37
|
], UpdateManyService);
|
|
39
38
|
Object.defineProperty(UpdateManyService, 'name', {
|
|
40
|
-
value:
|
|
39
|
+
value: (0, helpers_1.provideName)('UpdateMany', entity.name, version, 'Service'),
|
|
41
40
|
writable: false,
|
|
42
41
|
});
|
|
43
42
|
return {
|
|
44
|
-
provide:
|
|
43
|
+
provide: (0, helpers_1.provideName)('UpdateMany', entity.name, version, 'Service'),
|
|
45
44
|
useClass: UpdateManyService,
|
|
46
45
|
};
|
|
47
46
|
}
|
|
@@ -57,13 +56,13 @@ function createUpdateManyController(entity, controllerOptions, routeConfig, vers
|
|
|
57
56
|
UpdateManyController = __decorate([
|
|
58
57
|
(0, common_1.Controller)({ path, version }),
|
|
59
58
|
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
60
|
-
(0,
|
|
59
|
+
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
61
60
|
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
62
|
-
__param(0, (0, common_1.Inject)(
|
|
61
|
+
__param(0, (0, common_1.Inject)((0, helpers_1.provideName)('UpdateMany', entity.name, version, 'Service'))),
|
|
63
62
|
__metadata("design:paramtypes", [Object])
|
|
64
63
|
], UpdateManyController);
|
|
65
64
|
Object.defineProperty(UpdateManyController, 'name', {
|
|
66
|
-
value: `${(0, helpers_1.
|
|
65
|
+
value: `${(0, helpers_1.provideName)('UpdateMany', entity.name, version, 'Controller')}`,
|
|
67
66
|
writable: false,
|
|
68
67
|
});
|
|
69
68
|
return UpdateManyController;
|
|
@@ -13,7 +13,7 @@ const update_many_helper_1 = require("./update-many.helper");
|
|
|
13
13
|
let UpdateManyModule = UpdateManyModule_1 = class UpdateManyModule {
|
|
14
14
|
static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
|
|
15
15
|
const controller = (0, update_many_helper_1.createUpdateManyController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
|
|
16
|
-
const ServiceProvider = (0, update_many_helper_1.createUpdateManyServiceProvider)(entity, version);
|
|
16
|
+
const ServiceProvider = (0, update_many_helper_1.createUpdateManyServiceProvider)(entity, version, routeConfig.callback);
|
|
17
17
|
return {
|
|
18
18
|
module: UpdateManyModule_1,
|
|
19
19
|
imports: [databaseModule],
|
|
@@ -23,11 +23,13 @@
|
|
|
23
23
|
/// <reference types="mongoose/types/virtuals" />
|
|
24
24
|
/// <reference types="mongoose/types/inferschematype" />
|
|
25
25
|
import { Model } from 'mongoose';
|
|
26
|
+
import { DynamicApiServiceCallback } from '../../interfaces';
|
|
26
27
|
import { BaseEntity } from '../../models';
|
|
27
28
|
import { BaseService } from '../../services';
|
|
28
29
|
import { UpdateOneService } from './update-one-service.interface';
|
|
29
30
|
export declare abstract class BaseUpdateOneService<Entity extends BaseEntity> extends BaseService<Entity> implements UpdateOneService<Entity> {
|
|
30
31
|
protected readonly model: Model<Entity>;
|
|
32
|
+
protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
|
|
31
33
|
protected constructor(model: Model<Entity>);
|
|
32
34
|
updateOne(id: string, partial: Partial<Entity>): Promise<Entity>;
|
|
33
35
|
}
|
|
@@ -19,11 +19,13 @@ class BaseUpdateOneService extends services_1.BaseService {
|
|
|
19
19
|
if (!document) {
|
|
20
20
|
this.handleDocumentNotFound();
|
|
21
21
|
}
|
|
22
|
+
if (this.callback) {
|
|
23
|
+
await this.callback(document, this.model);
|
|
24
|
+
}
|
|
22
25
|
return this.buildInstance(document);
|
|
23
26
|
}
|
|
24
27
|
catch (error) {
|
|
25
28
|
this.handleDuplicateKeyError(error);
|
|
26
|
-
throw error;
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
-
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
|
|
2
|
+
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { UpdateOneControllerConstructor } from './update-one-controller.interface';
|
|
5
|
-
declare function createUpdateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
|
|
5
|
+
declare function createUpdateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
|
|
6
6
|
declare function createUpdateOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): UpdateOneControllerConstructor<Entity>;
|
|
7
7
|
export { createUpdateOneController, createUpdateOneServiceProvider };
|
|
@@ -17,19 +17,18 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
18
|
const swagger_1 = require("@nestjs/swagger");
|
|
19
19
|
const mongoose_2 = require("mongoose");
|
|
20
|
+
const decorators_1 = require("../../decorators");
|
|
20
21
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
21
22
|
const helpers_1 = require("../../helpers");
|
|
22
23
|
const base_update_one_service_1 = require("./base-update-one.service");
|
|
23
24
|
const update_one_controller_mixin_1 = require("./update-one-controller.mixin");
|
|
24
|
-
function
|
|
25
|
-
return `${(0, helpers_1.getNamePrefix)('UpdateOne', entityName, version)}Service`;
|
|
26
|
-
}
|
|
27
|
-
function createUpdateOneServiceProvider(entity, version) {
|
|
25
|
+
function createUpdateOneServiceProvider(entity, version, callback) {
|
|
28
26
|
let UpdateOneService = class UpdateOneService extends base_update_one_service_1.BaseUpdateOneService {
|
|
29
27
|
constructor(model) {
|
|
30
28
|
super(model);
|
|
31
29
|
this.model = model;
|
|
32
30
|
this.entity = entity;
|
|
31
|
+
this.callback = callback;
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
34
|
UpdateOneService = __decorate([
|
|
@@ -37,11 +36,11 @@ function createUpdateOneServiceProvider(entity, version) {
|
|
|
37
36
|
__metadata("design:paramtypes", [mongoose_2.Model])
|
|
38
37
|
], UpdateOneService);
|
|
39
38
|
Object.defineProperty(UpdateOneService, 'name', {
|
|
40
|
-
value:
|
|
39
|
+
value: (0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Service'),
|
|
41
40
|
writable: false,
|
|
42
41
|
});
|
|
43
42
|
return {
|
|
44
|
-
provide:
|
|
43
|
+
provide: (0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Service'),
|
|
45
44
|
useClass: UpdateOneService,
|
|
46
45
|
};
|
|
47
46
|
}
|
|
@@ -57,13 +56,13 @@ function createUpdateOneController(entity, controllerOptions, routeConfig, versi
|
|
|
57
56
|
UpdateOneController = __decorate([
|
|
58
57
|
(0, common_1.Controller)({ path, version }),
|
|
59
58
|
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
60
|
-
(0,
|
|
59
|
+
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
61
60
|
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
62
|
-
__param(0, (0, common_1.Inject)(
|
|
61
|
+
__param(0, (0, common_1.Inject)((0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Service'))),
|
|
63
62
|
__metadata("design:paramtypes", [Object])
|
|
64
63
|
], UpdateOneController);
|
|
65
64
|
Object.defineProperty(UpdateOneController, 'name', {
|
|
66
|
-
value: `${(0, helpers_1.
|
|
65
|
+
value: `${(0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Controller')}`,
|
|
67
66
|
writable: false,
|
|
68
67
|
});
|
|
69
68
|
return UpdateOneController;
|
|
@@ -13,7 +13,7 @@ const update_one_helper_1 = require("./update-one.helper");
|
|
|
13
13
|
let UpdateOneModule = UpdateOneModule_1 = class UpdateOneModule {
|
|
14
14
|
static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
|
|
15
15
|
const controller = (0, update_one_helper_1.createUpdateOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
|
|
16
|
-
const ServiceProvider = (0, update_one_helper_1.createUpdateOneServiceProvider)(entity, version);
|
|
16
|
+
const ServiceProvider = (0, update_one_helper_1.createUpdateOneServiceProvider)(entity, version, routeConfig.callback);
|
|
17
17
|
return {
|
|
18
18
|
module: UpdateOneModule_1,
|
|
19
19
|
imports: [databaseModule],
|
|
@@ -8,7 +8,8 @@ class BaseService {
|
|
|
8
8
|
this.model = model;
|
|
9
9
|
}
|
|
10
10
|
get isSoftDeletable() {
|
|
11
|
-
|
|
11
|
+
const paths = Object.getOwnPropertyNames(this.model.schema.paths);
|
|
12
|
+
return paths.includes('deletedAt') && paths.includes('isDeleted');
|
|
12
13
|
}
|
|
13
14
|
async findManyDocuments(conditions = {}) {
|
|
14
15
|
const documents = await this.model
|
|
@@ -57,6 +58,7 @@ class BaseService {
|
|
|
57
58
|
? `${properties[0]} is already used`
|
|
58
59
|
: `The combination of ${properties.join(', ')} already exists`);
|
|
59
60
|
}
|
|
61
|
+
throw new common_1.ServiceUnavailableException(error.message);
|
|
60
62
|
}
|
|
61
63
|
handleDocumentNotFound() {
|
|
62
64
|
throw new common_1.NotFoundException('Document not found');
|
|
@@ -1,10 +1,39 @@
|
|
|
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 { Schema } from 'mongoose';
|
|
1
26
|
import { BehaviorSubject } from 'rxjs';
|
|
2
27
|
import { DynamicApiGlobalState } from '../../interfaces';
|
|
3
28
|
export declare class DynamicApiGlobalStateService {
|
|
4
|
-
private static initialized$;
|
|
29
|
+
private static readonly initialized$;
|
|
30
|
+
private static readonly entitySchemas$;
|
|
5
31
|
private _;
|
|
32
|
+
private readonly defaultGlobalState;
|
|
6
33
|
constructor(initialGlobalState?: Partial<DynamicApiGlobalState>);
|
|
7
34
|
static onInitialized(): BehaviorSubject<boolean>;
|
|
35
|
+
static addEntitySchema<T = any>(name: string, schema: Schema<T>): void;
|
|
36
|
+
static getEntitySchema<T = any>(name: string): Schema<T, import("mongoose").Model<T, any, any, any, import("mongoose").IfAny<T, any, import("mongoose").Document<unknown, any, T> & import("mongoose").Require_id<T>>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>, import("mongoose").IfAny<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>, any, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>> & import("mongoose").Require_id<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>>>>;
|
|
8
37
|
set<V>([target, value]: ([keyof DynamicApiGlobalState, value: V] | ['partial', Partial<DynamicApiGlobalState>])): void;
|
|
9
38
|
get<T = DynamicApiGlobalState>(key?: keyof DynamicApiGlobalState): T;
|
|
10
39
|
private updateState;
|
|
@@ -4,16 +4,48 @@ exports.DynamicApiGlobalStateService = void 0;
|
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
5
|
class DynamicApiGlobalStateService {
|
|
6
6
|
constructor(initialGlobalState) {
|
|
7
|
-
this._ = {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
this._ = {};
|
|
8
|
+
this.defaultGlobalState = {
|
|
9
|
+
connectionName: 'dynamic-api-connection',
|
|
10
|
+
isGlobalCacheEnabled: true,
|
|
11
|
+
isAuthEnabled: false,
|
|
12
|
+
credentials: null,
|
|
13
|
+
jwtSecret: undefined,
|
|
14
|
+
cacheExcludedPaths: [],
|
|
15
|
+
routesConfig: {
|
|
16
|
+
excluded: [],
|
|
17
|
+
defaults: [
|
|
18
|
+
'GetMany',
|
|
19
|
+
'GetOne',
|
|
20
|
+
'CreateMany',
|
|
21
|
+
'CreateOne',
|
|
22
|
+
'UpdateMany',
|
|
23
|
+
'UpdateOne',
|
|
24
|
+
'ReplaceOne',
|
|
25
|
+
'DuplicateMany',
|
|
26
|
+
'DuplicateOne',
|
|
27
|
+
'DeleteMany',
|
|
28
|
+
'DeleteOne',
|
|
29
|
+
],
|
|
10
30
|
},
|
|
11
31
|
};
|
|
12
|
-
Object.assign(this._, initialGlobalState);
|
|
32
|
+
Object.assign(this._, this.defaultGlobalState, initialGlobalState);
|
|
13
33
|
}
|
|
14
34
|
static onInitialized() {
|
|
15
35
|
return this.initialized$;
|
|
16
36
|
}
|
|
37
|
+
static addEntitySchema(name, schema) {
|
|
38
|
+
const entitySchemas = this.entitySchemas$.value;
|
|
39
|
+
entitySchemas[name] = schema;
|
|
40
|
+
this.entitySchemas$.next(entitySchemas);
|
|
41
|
+
}
|
|
42
|
+
static getEntitySchema(name) {
|
|
43
|
+
const schema = this.entitySchemas$.value[name];
|
|
44
|
+
if (!schema) {
|
|
45
|
+
throw new Error(`Entity schema for "${name}" not found`);
|
|
46
|
+
}
|
|
47
|
+
return schema;
|
|
48
|
+
}
|
|
17
49
|
set([target, value]) {
|
|
18
50
|
if (target === 'partial') {
|
|
19
51
|
Object.assign(this._, value);
|
|
@@ -34,3 +66,4 @@ class DynamicApiGlobalStateService {
|
|
|
34
66
|
}
|
|
35
67
|
exports.DynamicApiGlobalStateService = DynamicApiGlobalStateService;
|
|
36
68
|
DynamicApiGlobalStateService.initialized$ = new rxjs_1.BehaviorSubject(false);
|
|
69
|
+
DynamicApiGlobalStateService.entitySchemas$ = new rxjs_1.BehaviorSubject({});
|
package/src/version.json
CHANGED