mongodb-dynamic-api 2.2.0 → 2.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/package.json +3 -1
- package/src/decorators/api-endpoint-visibility.decorator.d.ts +3 -0
- package/src/decorators/api-endpoint-visibility.decorator.js +10 -0
- package/src/decorators/index.d.ts +1 -0
- package/src/decorators/index.js +1 -0
- package/src/dynamic-api.module.js +1 -4
- package/src/helpers/format.helper.d.ts +2 -2
- package/src/helpers/format.helper.js +5 -2
- package/src/helpers/index.d.ts +2 -0
- package/src/helpers/index.js +2 -0
- package/src/interfaces/dynamic-api-service-callback.interface.d.ts +14 -27
- package/src/mixins/create-policies-guard.mixin.js +2 -2
- package/src/modules/auth/auth.helper.d.ts +3 -3
- package/src/modules/auth/auth.helper.js +4 -3
- package/src/modules/auth/auth.module.d.ts +1 -1
- package/src/modules/auth/auth.module.js +7 -3
- package/src/modules/auth/dtos/change-password.dto.d.ts +4 -0
- package/src/modules/auth/dtos/change-password.dto.js +29 -0
- package/src/modules/auth/dtos/reset-password.dto.d.ts +3 -0
- package/src/modules/auth/dtos/reset-password.dto.js +24 -0
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +9 -2
- package/src/modules/auth/interfaces/auth-service.interface.d.ts +2 -1
- package/src/modules/auth/mixins/auth-controller.mixin.d.ts +2 -2
- package/src/modules/auth/mixins/auth-controller.mixin.js +28 -2
- package/src/modules/auth/services/base-auth.service.d.ts +6 -3
- package/src/modules/auth/services/base-auth.service.js +64 -6
- package/src/routes/create-many/base-create-many.service.js +1 -1
- package/src/routes/create-many/create-many-controller.mixin.js +1 -2
- package/src/routes/create-many/create-many.helper.js +5 -7
- package/src/routes/create-many/create-many.module.d.ts +1 -1
- package/src/routes/create-many/create-many.module.js +1 -1
- package/src/routes/create-one/base-create-one.service.js +1 -1
- package/src/routes/create-one/create-one-controller.mixin.js +1 -2
- package/src/routes/create-one/create-one.helper.js +5 -7
- package/src/routes/delete-many/delete-many-controller.mixin.js +1 -2
- package/src/routes/delete-many/delete-many.helper.js +4 -7
- package/src/routes/delete-one/delete-one-controller.mixin.js +1 -2
- package/src/routes/delete-one/delete-one.helper.js +4 -7
- package/src/routes/duplicate-many/base-duplicate-many.service.js +1 -1
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.js +1 -2
- package/src/routes/duplicate-many/duplicate-many.helper.js +4 -7
- package/src/routes/duplicate-one/base-duplicate-one.service.js +1 -1
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.js +1 -2
- package/src/routes/duplicate-one/duplicate-one.helper.js +4 -7
- package/src/routes/get-many/base-get-many.service.js +1 -1
- package/src/routes/get-many/get-many-controller.mixin.js +1 -2
- package/src/routes/get-many/get-many.helper.js +4 -7
- package/src/routes/get-one/base-get-one.service.js +1 -1
- package/src/routes/get-one/get-one-controller.mixin.js +1 -2
- package/src/routes/get-one/get-one.helper.js +4 -7
- package/src/routes/replace-one/base-replace-one.service.js +1 -1
- package/src/routes/replace-one/replace-one-controller.mixin.js +1 -2
- package/src/routes/replace-one/replace-one.helper.js +4 -7
- package/src/routes/update-many/base-update-many.service.js +1 -1
- package/src/routes/update-many/update-many-controller.mixin.js +1 -2
- package/src/routes/update-many/update-many.helper.js +4 -7
- package/src/routes/update-one/base-update-one.service.js +1 -1
- package/src/routes/update-one/update-one-controller.mixin.js +1 -2
- package/src/routes/update-one/update-one.helper.js +4 -7
- package/src/services/base/base.service.d.ts +6 -2
- package/src/services/base/base.service.js +20 -1
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -16,11 +16,10 @@ exports.UpdateOneControllerMixin = void 0;
|
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
18
|
const helpers_1 = require("../../helpers");
|
|
19
|
-
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
20
19
|
const mixins_1 = require("../../mixins");
|
|
21
20
|
function UpdateOneControllerMixin(entity, controllerOptions, routeConfig, version) {
|
|
22
21
|
var _a;
|
|
23
|
-
const { routeType, description, isPublic, EntityParam, RouteBody, RoutePresenter, abilityPredicate, } = (0,
|
|
22
|
+
const { routeType, description, isPublic, EntityParam, RouteBody, RoutePresenter, abilityPredicate, } = (0, helpers_1.getControllerMixinData)(entity, controllerOptions, routeConfig, version);
|
|
24
23
|
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(routeType, entity, version, description, isPublic, {
|
|
25
24
|
param: EntityParam,
|
|
26
25
|
body: RouteBody,
|
|
@@ -22,9 +22,6 @@ const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
|
22
22
|
const helpers_1 = require("../../helpers");
|
|
23
23
|
const base_update_one_service_1 = require("./base-update-one.service");
|
|
24
24
|
const update_one_controller_mixin_1 = require("./update-one-controller.mixin");
|
|
25
|
-
function provideServiceName(entityName, version) {
|
|
26
|
-
return `${(0, helpers_1.getNamePrefix)('UpdateOne', entityName, version)}Service`;
|
|
27
|
-
}
|
|
28
25
|
function createUpdateOneServiceProvider(entity, version, callback) {
|
|
29
26
|
let UpdateOneService = class UpdateOneService extends base_update_one_service_1.BaseUpdateOneService {
|
|
30
27
|
constructor(model) {
|
|
@@ -39,11 +36,11 @@ function createUpdateOneServiceProvider(entity, version, callback) {
|
|
|
39
36
|
__metadata("design:paramtypes", [mongoose_2.Model])
|
|
40
37
|
], UpdateOneService);
|
|
41
38
|
Object.defineProperty(UpdateOneService, 'name', {
|
|
42
|
-
value:
|
|
39
|
+
value: (0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Service'),
|
|
43
40
|
writable: false,
|
|
44
41
|
});
|
|
45
42
|
return {
|
|
46
|
-
provide:
|
|
43
|
+
provide: (0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Service'),
|
|
47
44
|
useClass: UpdateOneService,
|
|
48
45
|
};
|
|
49
46
|
}
|
|
@@ -61,11 +58,11 @@ function createUpdateOneController(entity, controllerOptions, routeConfig, versi
|
|
|
61
58
|
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
62
59
|
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
63
60
|
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
64
|
-
__param(0, (0, common_1.Inject)(
|
|
61
|
+
__param(0, (0, common_1.Inject)((0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Service'))),
|
|
65
62
|
__metadata("design:paramtypes", [Object])
|
|
66
63
|
], UpdateOneController);
|
|
67
64
|
Object.defineProperty(UpdateOneController, 'name', {
|
|
68
|
-
value: `${(0, helpers_1.
|
|
65
|
+
value: `${(0, helpers_1.provideName)('UpdateOne', entity.name, version, 'Controller')}`,
|
|
69
66
|
writable: false,
|
|
70
67
|
});
|
|
71
68
|
return UpdateOneController;
|
|
@@ -24,17 +24,21 @@
|
|
|
24
24
|
/// <reference types="mongoose/types/inferschematype" />
|
|
25
25
|
import { Type } from '@nestjs/common';
|
|
26
26
|
import { FilterQuery, Model, Schema } from 'mongoose';
|
|
27
|
-
import { AbilityPredicate } from '../../interfaces';
|
|
27
|
+
import { AbilityPredicate, DynamicApiCallbackMethods } from '../../interfaces';
|
|
28
28
|
import { BaseEntity } from '../../models';
|
|
29
|
+
import { DynamicApiResetPasswordOptions } from '../../modules';
|
|
29
30
|
export declare abstract class BaseService<Entity extends BaseEntity> {
|
|
30
31
|
protected readonly model: Model<Entity>;
|
|
31
32
|
abilityPredicate: AbilityPredicate<Entity> | undefined;
|
|
32
33
|
user: unknown;
|
|
33
34
|
protected readonly entity: Type<Entity>;
|
|
35
|
+
protected readonly passwordField: keyof Entity | undefined;
|
|
36
|
+
protected readonly resetPasswordOptions: DynamicApiResetPasswordOptions<Entity> | undefined;
|
|
37
|
+
protected readonly callbackMethods: DynamicApiCallbackMethods<Entity>;
|
|
34
38
|
protected constructor(model: Model<Entity>);
|
|
35
39
|
get isSoftDeletable(): boolean;
|
|
36
40
|
findManyDocuments(conditions?: FilterQuery<Entity>): Promise<Entity[]>;
|
|
37
|
-
findOneDocument(_id: string | Schema.Types.ObjectId, conditions?: FilterQuery<Entity>): Promise<Entity>;
|
|
41
|
+
findOneDocument(_id: string | Schema.Types.ObjectId | undefined, conditions?: FilterQuery<Entity>): Promise<Entity>;
|
|
38
42
|
protected buildInstance(document: Entity): Entity;
|
|
39
43
|
protected handleAbilityPredicate(document: Entity): void;
|
|
40
44
|
protected handleDuplicateKeyError(error: any): void;
|
|
@@ -6,6 +6,25 @@ const builder_pattern_1 = require("builder-pattern");
|
|
|
6
6
|
class BaseService {
|
|
7
7
|
constructor(model) {
|
|
8
8
|
this.model = model;
|
|
9
|
+
this.callbackMethods = {
|
|
10
|
+
findById: async (id) => {
|
|
11
|
+
const entity = await this.model.findOne({ _id: id }).lean().exec();
|
|
12
|
+
if (!entity) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
return this.buildInstance(entity);
|
|
16
|
+
},
|
|
17
|
+
findAndUpdateById: async (id, update) => {
|
|
18
|
+
if (this.passwordField && typeof update[this.passwordField] !== 'undefined') {
|
|
19
|
+
throw new common_1.BadRequestException(`${this.passwordField} cannot be updated using this method because it is hashed. Use reset password process instead.`);
|
|
20
|
+
}
|
|
21
|
+
const updated = await this.model.findOneAndUpdate({ _id: id }, update, { new: true }).lean().exec();
|
|
22
|
+
if (!updated) {
|
|
23
|
+
this.handleDocumentNotFound();
|
|
24
|
+
}
|
|
25
|
+
return this.buildInstance(updated);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
9
28
|
}
|
|
10
29
|
get isSoftDeletable() {
|
|
11
30
|
const paths = Object.getOwnPropertyNames(this.model.schema.paths);
|
|
@@ -24,7 +43,7 @@ class BaseService {
|
|
|
24
43
|
async findOneDocument(_id, conditions = {}) {
|
|
25
44
|
const document = await this.model
|
|
26
45
|
.findOne({
|
|
27
|
-
_id,
|
|
46
|
+
...(_id ? { _id } : {}),
|
|
28
47
|
...conditions,
|
|
29
48
|
})
|
|
30
49
|
.lean()
|
package/src/version.json
CHANGED