mongodb-dynamic-api 2.1.6 → 2.1.8
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 +4 -0
- package/README.md +4 -4
- package/package.json +1 -2
- package/src/builders/index.d.ts +0 -1
- package/src/builders/index.js +0 -1
- package/src/builders/route-decorators/route-decorators.builder.d.ts +0 -1
- package/src/decorators/index.d.ts +0 -1
- package/src/decorators/index.js +0 -1
- package/src/dynamic-api.module.d.ts +2 -0
- package/src/dynamic-api.module.js +39 -29
- package/src/guards/base-policies.guard.d.ts +7 -8
- package/src/guards/base-policies.guard.js +17 -22
- package/src/helpers/controller-ability-predicates.helper.d.ts +2 -2
- package/src/helpers/controller-mixin.helper.d.ts +4 -28
- package/src/helpers/controller-mixin.helper.js +6 -16
- package/src/helpers/format.helper.d.ts +2 -0
- package/src/helpers/format.helper.js +6 -1
- package/src/interfaces/dynamic-api-ability.interface.d.ts +9 -0
- package/src/interfaces/dynamic-api-ability.interface.js +2 -0
- package/src/interfaces/dynamic-api-controller-options.interface.d.ts +1 -1
- package/src/interfaces/dynamic-api-policy-handler.interface.d.ts +4 -10
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +2 -2
- package/src/interfaces/index.d.ts +1 -1
- package/src/interfaces/index.js +1 -1
- package/src/mixins/create-policies-guard.mixin.d.ts +3 -2
- package/src/mixins/create-policies-guard.mixin.js +9 -6
- package/src/modules/auth/mixins/auth-controller.mixin.js +0 -1
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.d.ts +2 -3
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.js +6 -33
- package/src/modules/auth/services/base-auth.service.d.ts +0 -1
- package/src/modules/auth/services/base-auth.service.js +3 -6
- package/src/routes/create-many/create-many-controller.mixin.js +0 -2
- package/src/routes/create-many/create-many.helper.js +2 -2
- package/src/routes/create-one/create-one-controller.mixin.js +0 -2
- package/src/routes/create-one/create-one.helper.js +2 -2
- package/src/routes/delete-many/delete-many-controller.mixin.js +0 -2
- package/src/routes/delete-many/delete-many.helper.js +2 -2
- package/src/routes/delete-one/delete-one-controller.mixin.js +0 -2
- package/src/routes/delete-one/delete-one.helper.js +2 -2
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.js +0 -2
- package/src/routes/duplicate-many/duplicate-many.helper.js +2 -2
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.js +0 -2
- package/src/routes/duplicate-one/duplicate-one.helper.js +2 -2
- package/src/routes/get-many/get-many-controller.mixin.js +9 -6
- package/src/routes/get-many/get-many.helper.js +2 -2
- package/src/routes/get-one/get-one-controller.mixin.js +1 -4
- package/src/routes/get-one/get-one.helper.js +2 -2
- package/src/routes/replace-one/replace-one-controller.mixin.js +1 -3
- package/src/routes/replace-one/replace-one.helper.js +2 -2
- package/src/routes/update-many/update-many-controller.mixin.js +1 -3
- package/src/routes/update-many/update-many.helper.js +2 -2
- package/src/routes/update-one/update-one-controller.mixin.js +1 -3
- package/src/routes/update-one/update-one.helper.js +2 -2
- package/src/services/base/base.service.d.ts +7 -1
- package/src/services/base/base.service.js +33 -1
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/src/builders/casl/casl-ability.builder.d.ts +0 -5
- package/src/builders/casl/casl-ability.builder.js +0 -17
- package/src/decorators/check-policies.decorator.d.ts +0 -5
- package/src/decorators/check-policies.decorator.js +0 -8
- package/src/interfaces/dynamic-api-casl-ability.interface.d.ts +0 -12
- package/src/interfaces/dynamic-api-casl-ability.interface.js +0 -5
|
@@ -39,11 +39,11 @@ class BaseAuthService extends services_1.BaseService {
|
|
|
39
39
|
async register(userToCreate) {
|
|
40
40
|
const hashedPassword = await this.bcryptService.hashPassword(userToCreate[this.passwordField]);
|
|
41
41
|
const { _id } = await this.model.create({ ...userToCreate, [this.passwordField]: hashedPassword });
|
|
42
|
-
const user = await this.
|
|
42
|
+
const user = await this.findOneDocument(_id);
|
|
43
43
|
return this.login(user);
|
|
44
44
|
}
|
|
45
45
|
async getAccount({ id }) {
|
|
46
|
-
const user = await this.
|
|
46
|
+
const user = await this.findOneDocument(id);
|
|
47
47
|
const fieldsToBuild = [
|
|
48
48
|
'_id',
|
|
49
49
|
this.loginField,
|
|
@@ -54,12 +54,9 @@ class BaseAuthService extends services_1.BaseService {
|
|
|
54
54
|
async changePassword(userId, newPassword) {
|
|
55
55
|
const hashedPassword = await this.bcryptService.hashPassword(newPassword);
|
|
56
56
|
const { _id } = await this.model.findOneAndUpdate({ _id: userId }, { [this.passwordField]: hashedPassword }, { new: true });
|
|
57
|
-
const user = await this.
|
|
57
|
+
const user = await this.findOneDocument(_id);
|
|
58
58
|
return this.login(user);
|
|
59
59
|
}
|
|
60
|
-
async getUserById(userId) {
|
|
61
|
-
return (await this.model.findOne({ _id: userId }).lean().exec());
|
|
62
|
-
}
|
|
63
60
|
buildUserFields(user, fieldsToBuild) {
|
|
64
61
|
return this.buildInstance(fieldsToBuild.reduce((acc, field) => (user[field] !== undefined ? { ...acc, [field]: user[field] } : acc), {}));
|
|
65
62
|
}
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.CreateManyControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
@@ -40,7 +39,6 @@ function CreateManyControllerMixin(entity, controllerOptions, routeConfig, versi
|
|
|
40
39
|
__decorate([
|
|
41
40
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
42
41
|
(0, common_1.UseGuards)(CreateManyPoliciesGuard),
|
|
43
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
44
42
|
__param(0, (0, common_1.Body)()),
|
|
45
43
|
__metadata("design:type", Function),
|
|
46
44
|
__metadata("design:paramtypes", [typeof (_a = typeof RouteBody !== "undefined" && RouteBody) === "function" ? _a : Object]),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_create_many_service_1 = require("./base-create-many.service");
|
|
23
23
|
const create_many_controller_mixin_1 = require("./create-many-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('CreateMany', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createCreateManyServiceProvider(entity, version) {
|
|
28
28
|
let CreateManyService = class CreateManyService extends base_create_many_service_1.BaseCreateManyService {
|
|
@@ -63,7 +63,7 @@ function createCreateManyController(entity, controllerOptions, routeConfig, vers
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], CreateManyController);
|
|
65
65
|
Object.defineProperty(CreateManyController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('CreateMany', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return CreateManyController;
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.CreateOneControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
@@ -40,7 +39,6 @@ function CreateOneControllerMixin(entity, controllerOptions, routeConfig, versio
|
|
|
40
39
|
__decorate([
|
|
41
40
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
42
41
|
(0, common_1.UseGuards)(CreateOnePoliciesGuard),
|
|
43
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
44
42
|
__param(0, (0, common_1.Body)()),
|
|
45
43
|
__metadata("design:type", Function),
|
|
46
44
|
__metadata("design:paramtypes", [typeof (_a = typeof RouteBody !== "undefined" && RouteBody) === "function" ? _a : Object]),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_create_one_service_1 = require("./base-create-one.service");
|
|
23
23
|
const create_one_controller_mixin_1 = require("./create-one-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('CreateOne', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createCreateOneServiceProvider(entity, version) {
|
|
28
28
|
let CreateOneService = class CreateOneService extends base_create_one_service_1.BaseCreateOneService {
|
|
@@ -63,7 +63,7 @@ function createCreateOneController(entity, controllerOptions, routeConfig, versi
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], CreateOneController);
|
|
65
65
|
Object.defineProperty(CreateOneController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('CreateOne', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return CreateOneController;
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.DeleteManyControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
@@ -38,7 +37,6 @@ function DeleteManyControllerMixin(entity, controllerOptions, routeConfig, versi
|
|
|
38
37
|
__decorate([
|
|
39
38
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
40
39
|
(0, common_1.UseGuards)(DeleteManyPoliciesGuard),
|
|
41
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
42
40
|
__param(0, (0, common_1.Query)('ids')),
|
|
43
41
|
__metadata("design:type", Function),
|
|
44
42
|
__metadata("design:paramtypes", [Array]),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_delete_many_service_1 = require("./base-delete-many.service");
|
|
23
23
|
const delete_many_controller_mixin_1 = require("./delete-many-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('DeleteMany', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createDeleteManyServiceProvider(entity, version) {
|
|
28
28
|
let DeleteManyService = class DeleteManyService extends base_delete_many_service_1.BaseDeleteManyService {
|
|
@@ -63,7 +63,7 @@ function createDeleteManyController(entity, controllerOptions, routeConfig, vers
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], DeleteManyController);
|
|
65
65
|
Object.defineProperty(DeleteManyController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('DeleteMany', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return DeleteManyController;
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.DeleteOneControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
@@ -39,7 +38,6 @@ function DeleteOneControllerMixin(entity, controllerOptions, routeConfig, versio
|
|
|
39
38
|
__decorate([
|
|
40
39
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
41
40
|
(0, common_1.UseGuards)(DeleteOnePoliciesGuard),
|
|
42
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
43
41
|
__param(0, (0, common_1.Param)('id')),
|
|
44
42
|
__metadata("design:type", Function),
|
|
45
43
|
__metadata("design:paramtypes", [String]),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_delete_one_service_1 = require("./base-delete-one.service");
|
|
23
23
|
const delete_one_controller_mixin_1 = require("./delete-one-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('DeleteOne', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createDeleteOneServiceProvider(entity, version) {
|
|
28
28
|
let DeleteOneService = class DeleteOneService extends base_delete_one_service_1.BaseDeleteOneService {
|
|
@@ -63,7 +63,7 @@ function createDeleteOneController(entity, controllerOptions, routeConfig, versi
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], DeleteOneController);
|
|
65
65
|
Object.defineProperty(DeleteOneController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('DeleteOne', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return DeleteOneController;
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.DuplicateManyControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
@@ -40,7 +39,6 @@ function DuplicateManyControllerMixin(entity, controllerOptions, routeConfig, ve
|
|
|
40
39
|
__decorate([
|
|
41
40
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
42
41
|
(0, common_1.UseGuards)(DuplicateManyPoliciesGuard),
|
|
43
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
44
42
|
__param(0, (0, common_1.Query)('ids')),
|
|
45
43
|
__param(1, (0, common_1.Body)()),
|
|
46
44
|
__metadata("design:type", Function),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_duplicate_many_service_1 = require("./base-duplicate-many.service");
|
|
23
23
|
const duplicate_many_controller_mixin_1 = require("./duplicate-many-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('DuplicateMany', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createDuplicateManyServiceProvider(entity, version) {
|
|
28
28
|
let DuplicateManyService = class DuplicateManyService extends base_duplicate_many_service_1.BaseDuplicateManyService {
|
|
@@ -63,7 +63,7 @@ function createDuplicateManyController(entity, controllerOptions, routeConfig, v
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], DuplicateManyController);
|
|
65
65
|
Object.defineProperty(DuplicateManyController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('DuplicateMany', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return DuplicateManyController;
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.DuplicateOneControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const dtos_1 = require("../../dtos");
|
|
20
19
|
const helpers_1 = require("../../helpers");
|
|
21
20
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
@@ -42,7 +41,6 @@ function DuplicateOneControllerMixin(entity, controllerOptions, routeConfig, ver
|
|
|
42
41
|
__decorate([
|
|
43
42
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
44
43
|
(0, common_1.UseGuards)(DuplicateOnePoliciesGuard),
|
|
45
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
46
44
|
__param(0, (0, common_1.Param)('id')),
|
|
47
45
|
__param(1, (0, common_1.Body)()),
|
|
48
46
|
__metadata("design:type", Function),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_duplicate_one_service_1 = require("./base-duplicate-one.service");
|
|
23
23
|
const duplicate_one_controller_mixin_1 = require("./duplicate-one-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('DuplicateOne', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createDuplicateOneServiceProvider(entity, version) {
|
|
28
28
|
let DuplicateOneService = class DuplicateOneService extends base_duplicate_one_service_1.BaseDuplicateOneService {
|
|
@@ -63,7 +63,7 @@ function createDuplicateOneController(entity, controllerOptions, routeConfig, ve
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], DuplicateOneController);
|
|
65
65
|
Object.defineProperty(DuplicateOneController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('DuplicateOne', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return DuplicateOneController;
|
|
@@ -15,15 +15,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.GetManyControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const
|
|
18
|
+
const dtos_1 = require("../../dtos");
|
|
19
19
|
const helpers_1 = require("../../helpers");
|
|
20
20
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
21
|
const mixins_1 = require("../../mixins");
|
|
22
22
|
function GetManyControllerMixin(entity, controllerOptions, routeConfig, version) {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const { routeType, description, isPublic, RoutePresenter, abilityPredicate, } = (0, controller_mixin_helper_1.getControllerMixinData)(entity, controllerOptions, routeConfig, version);
|
|
24
|
+
class RouteQuery extends (routeConfig.dTOs?.query ?? dtos_1.EntityQuery) {
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(RouteQuery, 'name', {
|
|
27
|
+
value: `${routeType}${(0, helpers_1.getFormattedApiTag)(controllerOptions.apiTag, entity.name)}${(0, helpers_1.addVersionSuffix)(version)}Query`,
|
|
28
|
+
writable: false,
|
|
29
|
+
});
|
|
25
30
|
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(routeType, entity, version, description, isPublic, {
|
|
26
|
-
query: RouteQuery,
|
|
27
31
|
presenter: RoutePresenter,
|
|
28
32
|
});
|
|
29
33
|
class GetManyPoliciesGuard extends (0, mixins_1.CreatePoliciesGuardMixin)(entity, routeType, version, abilityPredicate) {
|
|
@@ -40,10 +44,9 @@ function GetManyControllerMixin(entity, controllerOptions, routeConfig, version)
|
|
|
40
44
|
__decorate([
|
|
41
45
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
42
46
|
(0, common_1.UseGuards)(GetManyPoliciesGuard),
|
|
43
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
44
47
|
__param(0, (0, common_1.Query)()),
|
|
45
48
|
__metadata("design:type", Function),
|
|
46
|
-
__metadata("design:paramtypes", [
|
|
49
|
+
__metadata("design:paramtypes", [RouteQuery]),
|
|
47
50
|
__metadata("design:returntype", Promise)
|
|
48
51
|
], BaseGetManyController.prototype, "getMany", null);
|
|
49
52
|
Object.defineProperty(BaseGetManyController, 'name', {
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_get_many_service_1 = require("./base-get-many.service");
|
|
23
23
|
const get_many_controller_mixin_1 = require("./get-many-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('GetMany', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createGetManyServiceProvider(entity, version) {
|
|
28
28
|
let GetManyService = class GetManyService extends base_get_many_service_1.BaseGetManyService {
|
|
@@ -63,7 +63,7 @@ function createGetManyController(entity, controllerOptions, routeConfig, version
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], GetManyController);
|
|
65
65
|
Object.defineProperty(GetManyController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('GetMany', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return GetManyController;
|
|
@@ -15,16 +15,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.GetOneControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const dtos_1 = require("../../dtos");
|
|
20
19
|
const helpers_1 = require("../../helpers");
|
|
21
20
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
22
21
|
const mixins_1 = require("../../mixins");
|
|
23
22
|
function GetOneControllerMixin(entity, controllerOptions, routeConfig, version) {
|
|
24
|
-
const { routeType, description, isPublic,
|
|
23
|
+
const { routeType, description, isPublic, RoutePresenter, abilityPredicate, } = (0, controller_mixin_helper_1.getControllerMixinData)(entity, controllerOptions, routeConfig, version);
|
|
25
24
|
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(routeType, entity, version, description, isPublic, {
|
|
26
25
|
param: dtos_1.EntityParam,
|
|
27
|
-
query: RouteQuery,
|
|
28
26
|
presenter: RoutePresenter,
|
|
29
27
|
});
|
|
30
28
|
class GetOnePoliciesGuard extends (0, mixins_1.CreatePoliciesGuardMixin)(entity, routeType, version, abilityPredicate) {
|
|
@@ -41,7 +39,6 @@ function GetOneControllerMixin(entity, controllerOptions, routeConfig, version)
|
|
|
41
39
|
__decorate([
|
|
42
40
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
43
41
|
(0, common_1.UseGuards)(GetOnePoliciesGuard),
|
|
44
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
45
42
|
__param(0, (0, common_1.Param)('id')),
|
|
46
43
|
__metadata("design:type", Function),
|
|
47
44
|
__metadata("design:paramtypes", [String]),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_get_one_service_1 = require("./base-get-one.service");
|
|
23
23
|
const get_one_controller_mixin_1 = require("./get-one-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('GetOne', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createGetOneServiceProvider(entity, version) {
|
|
28
28
|
let GetOneService = class GetOneService extends base_get_one_service_1.BaseGetOneService {
|
|
@@ -63,7 +63,7 @@ function createGetOneController(entity, controllerOptions, routeConfig, version,
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], GetOneController);
|
|
65
65
|
Object.defineProperty(GetOneController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('GetOne', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return GetOneController;
|
|
@@ -15,14 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.ReplaceOneControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
22
21
|
function ReplaceOneControllerMixin(entity, controllerOptions, routeConfig, version) {
|
|
23
22
|
var _a;
|
|
24
23
|
const { routeType, description, isPublic, EntityParam, RouteBody, RoutePresenter, abilityPredicate, } = (0, controller_mixin_helper_1.getControllerMixinData)(entity, controllerOptions, routeConfig, version);
|
|
25
|
-
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(
|
|
24
|
+
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(routeType, entity, version, description, isPublic, {
|
|
26
25
|
param: EntityParam,
|
|
27
26
|
body: RouteBody,
|
|
28
27
|
presenter: RoutePresenter,
|
|
@@ -41,7 +40,6 @@ function ReplaceOneControllerMixin(entity, controllerOptions, routeConfig, versi
|
|
|
41
40
|
__decorate([
|
|
42
41
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
43
42
|
(0, common_1.UseGuards)(ReplaceOnePoliciesGuard),
|
|
44
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
45
43
|
__param(0, (0, common_1.Param)('id')),
|
|
46
44
|
__param(1, (0, common_1.Body)()),
|
|
47
45
|
__metadata("design:type", Function),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_replace_one_service_1 = require("./base-replace-one.service");
|
|
23
23
|
const replace_one_controller_mixin_1 = require("./replace-one-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('ReplaceOne', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createReplaceOneServiceProvider(entity, version) {
|
|
28
28
|
let ReplaceOneService = class ReplaceOneService extends base_replace_one_service_1.BaseReplaceOneService {
|
|
@@ -63,7 +63,7 @@ function createReplaceOneController(entity, controllerOptions, routeConfig, vers
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], ReplaceOneController);
|
|
65
65
|
Object.defineProperty(ReplaceOneController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('ReplaceOne', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return ReplaceOneController;
|
|
@@ -15,14 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.UpdateManyControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
22
21
|
function UpdateManyControllerMixin(entity, controllerOptions, routeConfig, version) {
|
|
23
22
|
var _a;
|
|
24
23
|
const { routeType, description, isPublic, RouteBody, RoutePresenter, abilityPredicate, } = (0, controller_mixin_helper_1.getControllerMixinData)(entity, controllerOptions, routeConfig, version);
|
|
25
|
-
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(
|
|
24
|
+
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(routeType, entity, version, description, isPublic, {
|
|
26
25
|
body: RouteBody,
|
|
27
26
|
presenter: RoutePresenter,
|
|
28
27
|
});
|
|
@@ -40,7 +39,6 @@ function UpdateManyControllerMixin(entity, controllerOptions, routeConfig, versi
|
|
|
40
39
|
__decorate([
|
|
41
40
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
42
41
|
(0, common_1.UseGuards)(UpdateManyPoliciesGuard),
|
|
43
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
44
42
|
__param(0, (0, common_1.Query)('ids')),
|
|
45
43
|
__param(1, (0, common_1.Body)()),
|
|
46
44
|
__metadata("design:type", Function),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_update_many_service_1 = require("./base-update-many.service");
|
|
23
23
|
const update_many_controller_mixin_1 = require("./update-many-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('UpdateMany', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createUpdateManyServiceProvider(entity, version) {
|
|
28
28
|
let UpdateManyService = class UpdateManyService extends base_update_many_service_1.BaseUpdateManyService {
|
|
@@ -63,7 +63,7 @@ function createUpdateManyController(entity, controllerOptions, routeConfig, vers
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], UpdateManyController);
|
|
65
65
|
Object.defineProperty(UpdateManyController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('UpdateMany', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return UpdateManyController;
|
|
@@ -15,14 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.UpdateOneControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
-
const decorators_1 = require("../../decorators");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const controller_mixin_helper_1 = require("../../helpers/controller-mixin.helper");
|
|
21
20
|
const mixins_1 = require("../../mixins");
|
|
22
21
|
function UpdateOneControllerMixin(entity, controllerOptions, routeConfig, version) {
|
|
23
22
|
var _a;
|
|
24
23
|
const { routeType, description, isPublic, EntityParam, RouteBody, RoutePresenter, abilityPredicate, } = (0, controller_mixin_helper_1.getControllerMixinData)(entity, controllerOptions, routeConfig, version);
|
|
25
|
-
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(
|
|
24
|
+
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(routeType, entity, version, description, isPublic, {
|
|
26
25
|
param: EntityParam,
|
|
27
26
|
body: RouteBody,
|
|
28
27
|
presenter: RoutePresenter,
|
|
@@ -41,7 +40,6 @@ function UpdateOneControllerMixin(entity, controllerOptions, routeConfig, versio
|
|
|
41
40
|
__decorate([
|
|
42
41
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
43
42
|
(0, common_1.UseGuards)(UpdateOnePoliciesGuard),
|
|
44
|
-
(0, decorators_1.CheckPolicies)((ability) => ability.can(routeType, entity)),
|
|
45
43
|
__param(0, (0, common_1.Param)('id')),
|
|
46
44
|
__param(1, (0, common_1.Body)()),
|
|
47
45
|
__metadata("design:type", Function),
|
|
@@ -22,7 +22,7 @@ const helpers_1 = require("../../helpers");
|
|
|
22
22
|
const base_update_one_service_1 = require("./base-update-one.service");
|
|
23
23
|
const update_one_controller_mixin_1 = require("./update-one-controller.mixin");
|
|
24
24
|
function provideServiceName(entityName, version) {
|
|
25
|
-
return
|
|
25
|
+
return `${(0, helpers_1.getNamePrefix)('UpdateOne', entityName, version)}Service`;
|
|
26
26
|
}
|
|
27
27
|
function createUpdateOneServiceProvider(entity, version) {
|
|
28
28
|
let UpdateOneService = class UpdateOneService extends base_update_one_service_1.BaseUpdateOneService {
|
|
@@ -63,7 +63,7 @@ function createUpdateOneController(entity, controllerOptions, routeConfig, versi
|
|
|
63
63
|
__metadata("design:paramtypes", [Object])
|
|
64
64
|
], UpdateOneController);
|
|
65
65
|
Object.defineProperty(UpdateOneController, 'name', {
|
|
66
|
-
value:
|
|
66
|
+
value: `${(0, helpers_1.getNamePrefix)('UpdateOne', entity.name, version)}Controller`,
|
|
67
67
|
writable: false,
|
|
68
68
|
});
|
|
69
69
|
return UpdateOneController;
|
|
@@ -23,14 +23,20 @@
|
|
|
23
23
|
/// <reference types="mongoose/types/virtuals" />
|
|
24
24
|
/// <reference types="mongoose/types/inferschematype" />
|
|
25
25
|
import { Type } from '@nestjs/common';
|
|
26
|
-
import { Model } from 'mongoose';
|
|
26
|
+
import { FilterQuery, Model, Schema } from 'mongoose';
|
|
27
|
+
import { AbilityPredicate } from '../../interfaces';
|
|
27
28
|
import { BaseEntity } from '../../models';
|
|
28
29
|
export declare abstract class BaseService<Entity extends BaseEntity> {
|
|
29
30
|
protected readonly model: Model<Entity>;
|
|
31
|
+
abilityPredicate: AbilityPredicate<Entity> | undefined;
|
|
32
|
+
user: unknown;
|
|
30
33
|
protected readonly entity: Type<Entity>;
|
|
31
34
|
protected constructor(model: Model<Entity>);
|
|
32
35
|
get isSoftDeletable(): boolean;
|
|
36
|
+
findManyDocuments(conditions?: FilterQuery<Entity>): Promise<Entity[]>;
|
|
37
|
+
findOneDocument(_id: string | Schema.Types.ObjectId, conditions?: FilterQuery<Entity>): Promise<Entity>;
|
|
33
38
|
protected buildInstance(document: Entity): Entity;
|
|
39
|
+
protected handleAbilityPredicate(document: Entity): void;
|
|
34
40
|
protected handleDuplicateKeyError(error: any): void;
|
|
35
41
|
protected handleDocumentNotFound(): void;
|
|
36
42
|
}
|
|
@@ -10,12 +10,44 @@ class BaseService {
|
|
|
10
10
|
get isSoftDeletable() {
|
|
11
11
|
return Object.getOwnPropertyNames(this.model.schema.paths).includes('deletedAt');
|
|
12
12
|
}
|
|
13
|
+
async findManyDocuments(conditions = {}) {
|
|
14
|
+
const documents = await this.model
|
|
15
|
+
.find(conditions)
|
|
16
|
+
.lean()
|
|
17
|
+
.exec();
|
|
18
|
+
if (this.abilityPredicate) {
|
|
19
|
+
documents.forEach((d) => this.handleAbilityPredicate(d));
|
|
20
|
+
}
|
|
21
|
+
return documents;
|
|
22
|
+
}
|
|
23
|
+
async findOneDocument(_id, conditions = {}) {
|
|
24
|
+
const document = await this.model
|
|
25
|
+
.findOne({
|
|
26
|
+
_id,
|
|
27
|
+
...conditions,
|
|
28
|
+
})
|
|
29
|
+
.lean()
|
|
30
|
+
.exec();
|
|
31
|
+
if (!document) {
|
|
32
|
+
throw new common_1.BadRequestException('Document not found');
|
|
33
|
+
}
|
|
34
|
+
if (this.abilityPredicate) {
|
|
35
|
+
this.handleAbilityPredicate(document);
|
|
36
|
+
}
|
|
37
|
+
return document;
|
|
38
|
+
}
|
|
13
39
|
buildInstance(document) {
|
|
14
40
|
const { _id, id, __v, ...rest } = document;
|
|
15
41
|
return (0, builder_pattern_1.Builder)(this.entity, rest)
|
|
16
42
|
.id(_id?.toString() ?? id)
|
|
17
43
|
.build();
|
|
18
44
|
}
|
|
45
|
+
handleAbilityPredicate(document) {
|
|
46
|
+
const isAllowed = this.abilityPredicate(document, this.user);
|
|
47
|
+
if (!isAllowed) {
|
|
48
|
+
throw new common_1.ForbiddenException('Forbidden resource');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
19
51
|
handleDuplicateKeyError(error) {
|
|
20
52
|
if (error.code === 11000) {
|
|
21
53
|
const properties = Object.entries(error.keyValue)
|
|
@@ -27,7 +59,7 @@ class BaseService {
|
|
|
27
59
|
}
|
|
28
60
|
}
|
|
29
61
|
handleDocumentNotFound() {
|
|
30
|
-
throw new common_1.
|
|
62
|
+
throw new common_1.NotFoundException('Document not found');
|
|
31
63
|
}
|
|
32
64
|
}
|
|
33
65
|
exports.BaseService = BaseService;
|
package/src/version.json
CHANGED