mongodb-dynamic-api 2.8.3 → 2.10.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 +25 -0
- package/package.json +2 -2
- package/src/builders/route-decorators/route-decorators.builder.d.ts +2 -1
- package/src/builders/route-decorators/route-decorators.builder.js +7 -7
- package/src/builders/route-decorators/route-decorators.builder.js.map +1 -1
- package/src/filters/index.d.ts +1 -0
- package/src/filters/index.js +18 -0
- package/src/filters/index.js.map +1 -0
- package/src/guards/base-policies.guard.d.ts +2 -0
- package/src/guards/base-policies.guard.js +3 -0
- package/src/guards/base-policies.guard.js.map +1 -1
- package/src/guards/dynamic-api-jwt-auth.guard.d.ts +1 -1
- package/src/guards/dynamic-api-jwt-auth.guard.js.map +1 -1
- package/src/helpers/index.d.ts +1 -0
- package/src/helpers/index.js +1 -0
- package/src/helpers/index.js.map +1 -1
- package/src/helpers/repository.helper.d.ts +53 -0
- package/src/helpers/repository.helper.js +70 -0
- package/src/helpers/repository.helper.js.map +1 -0
- package/src/helpers/swagger-config.helper.js +4 -0
- package/src/helpers/swagger-config.helper.js.map +1 -1
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
- package/src/index.js.map +1 -1
- package/src/interfaces/dynamic-api-ability.interface.d.ts +1 -1
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +3 -0
- package/src/interfaces/dynamic-api-route-dtos-bundle.type.d.ts +1 -0
- package/src/interfaces/dynamic-api-service-before-save-callback.interface.d.ts +11 -0
- package/src/interfaces/dynamic-api-service-before-save-callback.interface.js +3 -0
- package/src/interfaces/dynamic-api-service-before-save-callback.interface.js.map +1 -0
- package/src/interfaces/dynamic-api-service-callback.interface.d.ts +2 -0
- package/src/interfaces/dynamic-api-swagger-options.type.d.ts +1 -0
- package/src/interfaces/index.d.ts +1 -0
- package/src/interfaces/index.js +1 -0
- package/src/interfaces/index.js.map +1 -1
- package/src/mixins/create-policies-guard.mixin.d.ts +2 -1
- package/src/mixins/create-policies-guard.mixin.js +2 -1
- package/src/mixins/create-policies-guard.mixin.js.map +1 -1
- package/src/models/soft-deletable-entity.model.js +1 -6
- package/src/models/soft-deletable-entity.model.js.map +1 -1
- package/src/modules/auth/auth.helper.d.ts +2 -2
- package/src/modules/auth/auth.helper.js +5 -3
- package/src/modules/auth/auth.helper.js.map +1 -1
- package/src/modules/auth/auth.module.js +10 -3
- package/src/modules/auth/auth.module.js.map +1 -1
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +4 -1
- package/src/modules/auth/mixins/auth-controller.mixin.js +1 -1
- package/src/modules/auth/mixins/auth-controller.mixin.js.map +1 -1
- package/src/modules/auth/mixins/auth-policies-guard.mixin.js +2 -2
- package/src/modules/auth/mixins/auth-policies-guard.mixin.js.map +1 -1
- package/src/modules/auth/services/base-auth.service.d.ts +3 -1
- package/src/modules/auth/services/base-auth.service.js +16 -9
- package/src/modules/auth/services/base-auth.service.js.map +1 -1
- package/src/routes/aggregate/aggregate-controller.interface.d.ts +1 -1
- package/src/routes/aggregate/aggregate-controller.mixin.d.ts +1 -1
- package/src/routes/aggregate/aggregate-controller.mixin.js +11 -10
- package/src/routes/aggregate/aggregate-controller.mixin.js.map +1 -1
- package/src/routes/aggregate/aggregate-gateway.interface.d.ts +1 -1
- package/src/routes/aggregate/aggregate-gateway.mixin.js +5 -5
- package/src/routes/aggregate/aggregate-gateway.mixin.js.map +1 -1
- package/src/routes/aggregate/aggregate-service.interface.d.ts +7 -2
- package/src/routes/aggregate/base-aggregate.service.d.ts +6 -1
- package/src/routes/aggregate/base-aggregate.service.js +25 -3
- package/src/routes/aggregate/base-aggregate.service.js.map +1 -1
- package/src/routes/create-many/create-many-gateway.mixin.js +2 -2
- package/src/routes/create-many/create-many-gateway.mixin.js.map +1 -1
- package/src/routes/create-one/base-create-one.service.d.ts +2 -3
- package/src/routes/create-one/base-create-one.service.js +5 -1
- package/src/routes/create-one/base-create-one.service.js.map +1 -1
- package/src/routes/create-one/create-one-gateway.mixin.js +2 -2
- package/src/routes/create-one/create-one-gateway.mixin.js.map +1 -1
- package/src/routes/create-one/create-one.helper.d.ts +2 -2
- package/src/routes/create-one/create-one.helper.js +2 -1
- package/src/routes/create-one/create-one.helper.js.map +1 -1
- package/src/routes/create-one/create-one.module.js +1 -1
- package/src/routes/create-one/create-one.module.js.map +1 -1
- package/src/routes/delete-many/delete-many-gateway.mixin.js +2 -2
- package/src/routes/delete-many/delete-many-gateway.mixin.js.map +1 -1
- package/src/routes/delete-one/delete-one-gateway.mixin.js +2 -2
- package/src/routes/delete-one/delete-one-gateway.mixin.js.map +1 -1
- package/src/routes/duplicate-many/duplicate-many-gateway.mixin.js +2 -2
- package/src/routes/duplicate-many/duplicate-many-gateway.mixin.js.map +1 -1
- package/src/routes/duplicate-one/duplicate-one-gateway.mixin.js +2 -2
- package/src/routes/duplicate-one/duplicate-one-gateway.mixin.js.map +1 -1
- package/src/routes/get-many/get-many-gateway.mixin.js +2 -2
- package/src/routes/get-many/get-many-gateway.mixin.js.map +1 -1
- package/src/routes/get-one/get-one-gateway.mixin.js +2 -2
- package/src/routes/get-one/get-one-gateway.mixin.js.map +1 -1
- package/src/routes/replace-one/replace-one-gateway.mixin.js +2 -2
- package/src/routes/replace-one/replace-one-gateway.mixin.js.map +1 -1
- package/src/routes/update-many/update-many-gateway.mixin.js +2 -2
- package/src/routes/update-many/update-many-gateway.mixin.js.map +1 -1
- package/src/routes/update-one/base-update-one.service.d.ts +2 -1
- package/src/routes/update-one/base-update-one.service.js +12 -4
- package/src/routes/update-one/base-update-one.service.js.map +1 -1
- package/src/routes/update-one/update-one-gateway.mixin.js +2 -2
- package/src/routes/update-one/update-one-gateway.mixin.js.map +1 -1
- package/src/routes/update-one/update-one.helper.d.ts +2 -2
- package/src/routes/update-one/update-one.helper.js +2 -1
- package/src/routes/update-one/update-one.helper.js.map +1 -1
- package/src/routes/update-one/update-one.module.js +1 -1
- package/src/routes/update-one/update-one.module.js.map +1 -1
- package/src/services/base/base.service.d.ts +3 -0
- package/src/services/base/base.service.js +20 -1
- package/src/services/base/base.service.js.map +1 -1
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +1 -1
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js.map +1 -1
- package/src/utils/deep-patial.d.ts +3 -0
- package/src/utils/deep-patial.js +3 -0
- package/src/utils/deep-patial.js.map +1 -0
- package/src/utils/index.d.ts +1 -0
- package/src/utils/index.js +18 -0
- package/src/utils/index.js.map +1 -0
- package/src/version.json +1 -1
- package/test/dynamic-api-for-feature.e2e-spec.js +0 -19
- package/test/dynamic-api-for-feature.e2e-spec.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -15,17 +15,12 @@ const swagger_1 = require("@nestjs/swagger");
|
|
|
15
15
|
const class_transformer_1 = require("class-transformer");
|
|
16
16
|
const base_entity_model_1 = require("./base-entity.model");
|
|
17
17
|
class SoftDeletableEntity extends base_entity_model_1.BaseEntity {
|
|
18
|
-
constructor() {
|
|
19
|
-
super(...arguments);
|
|
20
|
-
this.isDeleted = false;
|
|
21
|
-
this.deletedAt = null;
|
|
22
|
-
}
|
|
23
18
|
}
|
|
24
19
|
exports.SoftDeletableEntity = SoftDeletableEntity;
|
|
25
20
|
__decorate([
|
|
26
21
|
(0, class_transformer_1.Exclude)(),
|
|
27
22
|
(0, mongoose_1.Prop)({ type: Boolean, default: false }),
|
|
28
|
-
__metadata("design:type",
|
|
23
|
+
__metadata("design:type", Boolean)
|
|
29
24
|
], SoftDeletableEntity.prototype, "isDeleted", void 0);
|
|
30
25
|
__decorate([
|
|
31
26
|
(0, swagger_1.ApiProperty)({ type: Date, nullable: true }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soft-deletable-entity.model.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/models/soft-deletable-entity.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAwC;AACxC,6CAA8C;AAC9C,yDAA4C;AAC5C,2DAAiD;AAEjD,MAAsB,mBAAoB,SAAQ,8BAAU;
|
|
1
|
+
{"version":3,"file":"soft-deletable-entity.model.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/models/soft-deletable-entity.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAwC;AACxC,6CAA8C;AAC9C,yDAA4C;AAC5C,2DAAiD;AAEjD,MAAsB,mBAAoB,SAAQ,8BAAU;CAQ3D;AARD,kDAQC;AALC;IAFC,IAAA,2BAAO,GAAE;IACT,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;sDACrB;AAInB;IAFC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,eAAI,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;8BACzC,IAAI;sDAAQ"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
-
import { AuthAbilityPredicate, DynamicApiServiceCallback, DynamicAPIServiceProvider, GatewayOptions } from '../../interfaces';
|
|
2
|
+
import { AuthAbilityPredicate, DynamicApiServiceBeforeSaveCallback, DynamicApiServiceCallback, DynamicAPIServiceProvider, GatewayOptions } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { AuthControllerConstructor, AuthGatewayConstructor, DynamicApiLoginOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions } from './interfaces';
|
|
5
5
|
declare const authServiceProviderName = "DynamicApiAuthService";
|
|
6
6
|
declare const authGatewayProviderName = "DynamicApiAuthGateway";
|
|
7
7
|
declare const localStrategyProviderName = "DynamicApiLocalStrategy";
|
|
8
8
|
declare function createLocalStrategyProvider<Entity extends BaseEntity>(loginField: keyof Entity, passwordField: keyof Entity, abilityPredicate: AuthAbilityPredicate | undefined): DynamicAPIServiceProvider;
|
|
9
|
-
declare function createAuthServiceProvider<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginField, passwordField, additionalFields, callback: loginCallback }: DynamicApiLoginOptions<Entity>, registerCallback: DynamicApiServiceCallback<Entity> | undefined, resetPasswordOptions: DynamicApiResetPasswordOptions<Entity> | undefined, updateAccountCallback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
|
|
9
|
+
declare function createAuthServiceProvider<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginField, passwordField, additionalFields, callback: loginCallback }: DynamicApiLoginOptions<Entity>, registerCallback: DynamicApiServiceCallback<Entity> | undefined, resetPasswordOptions: DynamicApiResetPasswordOptions<Entity> | undefined, updateAccountCallback: DynamicApiServiceCallback<Entity> | undefined, beforeRegisterCallback: DynamicApiServiceBeforeSaveCallback<Entity> | undefined, beforeUpdateAccountCallback: DynamicApiServiceBeforeSaveCallback<Entity> | undefined): DynamicAPIServiceProvider;
|
|
10
10
|
declare function createAuthController<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginField, passwordField, additionalFields }: DynamicApiLoginOptions<Entity>, registerOptions: DynamicApiRegisterOptions<Entity> | undefined, validationPipeOptions: ValidationPipeOptions | undefined, resetPasswordOptions: DynamicApiResetPasswordOptions<Entity> | undefined, updateAccountOptions: DynamicApiUpdateAccountOptions<Entity> | undefined): AuthControllerConstructor<Entity>;
|
|
11
11
|
declare function createAuthGateway<Entity extends BaseEntity>(userEntity: Type<Entity>, loginOptions: DynamicApiLoginOptions<Entity>, registerOptions: DynamicApiRegisterOptions<Entity> | undefined, validationPipeOptions: ValidationPipeOptions | undefined, resetPasswordOptions: DynamicApiResetPasswordOptions<Entity> | undefined, updateAccountOptions: DynamicApiUpdateAccountOptions<Entity> | undefined, gatewayOptions: GatewayOptions): AuthGatewayConstructor<Entity>;
|
|
12
12
|
export { authServiceProviderName, authGatewayProviderName, createAuthController, createAuthServiceProvider, createAuthGateway, createLocalStrategyProvider, localStrategyProviderName, };
|
|
@@ -23,7 +23,7 @@ const mongoose_2 = require("mongoose");
|
|
|
23
23
|
const passport_local_1 = require("passport-local");
|
|
24
24
|
const decorators_1 = require("../../decorators");
|
|
25
25
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
26
|
-
const
|
|
26
|
+
const filters_1 = require("../../filters");
|
|
27
27
|
const services_1 = require("../../services");
|
|
28
28
|
const mixins_1 = require("./mixins");
|
|
29
29
|
const services_2 = require("./services");
|
|
@@ -65,7 +65,7 @@ function createLocalStrategyProvider(loginField, passwordField, abilityPredicate
|
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
exports.createLocalStrategyProvider = createLocalStrategyProvider;
|
|
68
|
-
function createAuthServiceProvider(userEntity, { loginField, passwordField, additionalFields = [], callback: loginCallback }, registerCallback, resetPasswordOptions, updateAccountCallback) {
|
|
68
|
+
function createAuthServiceProvider(userEntity, { loginField, passwordField, additionalFields = [], callback: loginCallback }, registerCallback, resetPasswordOptions, updateAccountCallback, beforeRegisterCallback, beforeUpdateAccountCallback) {
|
|
69
69
|
let AuthService = class AuthService extends services_2.BaseAuthService {
|
|
70
70
|
constructor(model, jwtService, bcryptService) {
|
|
71
71
|
super(model, jwtService, bcryptService);
|
|
@@ -76,7 +76,9 @@ function createAuthServiceProvider(userEntity, { loginField, passwordField, addi
|
|
|
76
76
|
this.additionalRequestFields = additionalFields;
|
|
77
77
|
this.loginField = loginField;
|
|
78
78
|
this.passwordField = passwordField;
|
|
79
|
+
this.beforeRegisterCallback = beforeRegisterCallback;
|
|
79
80
|
this.registerCallback = registerCallback;
|
|
81
|
+
this.beforeUpdateAccountCallback = beforeUpdateAccountCallback;
|
|
80
82
|
this.updateAccountCallback = updateAccountCallback;
|
|
81
83
|
this.loginCallback = loginCallback;
|
|
82
84
|
this.resetPasswordOptions = resetPasswordOptions;
|
|
@@ -121,7 +123,7 @@ function createAuthGateway(userEntity, loginOptions, registerOptions, validation
|
|
|
121
123
|
};
|
|
122
124
|
AuthGateway = __decorate([
|
|
123
125
|
(0, websockets_1.WebSocketGateway)(gatewayOptions),
|
|
124
|
-
(0, common_1.UseFilters)(new
|
|
126
|
+
(0, common_1.UseFilters)(new filters_1.DynamicAPIWsExceptionFilter()),
|
|
125
127
|
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
126
128
|
__param(0, (0, common_1.Inject)(authServiceProviderName)),
|
|
127
129
|
__metadata("design:paramtypes", [Object, jwt_1.JwtService])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.helper.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"auth.helper.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,12 +20,19 @@ const strategies_1 = require("./strategies");
|
|
|
20
20
|
let AuthModule = AuthModule_1 = class AuthModule {
|
|
21
21
|
static forRoot(options, extraImports = []) {
|
|
22
22
|
const { userEntity, login: { loginField, passwordField, ...login }, register, updateAccount, resetPassword, jwt: { secret, expiresIn }, validationPipeOptions, webSocket, } = this.initializeAuthOptions(options);
|
|
23
|
-
const { resetPasswordCallback, changePasswordCallback, emailField, expirationInMinutes, changePasswordAbilityPredicate, } = resetPassword;
|
|
23
|
+
const { beforeChangePasswordCallback, resetPasswordCallback, changePasswordCallback, emailField, expirationInMinutes, changePasswordAbilityPredicate, } = resetPassword;
|
|
24
24
|
const resetPasswordOptions = resetPasswordCallback
|
|
25
|
-
? {
|
|
25
|
+
? {
|
|
26
|
+
beforeChangePasswordCallback,
|
|
27
|
+
resetPasswordCallback,
|
|
28
|
+
changePasswordCallback,
|
|
29
|
+
emailField,
|
|
30
|
+
expirationInMinutes,
|
|
31
|
+
changePasswordAbilityPredicate: changePasswordAbilityPredicate,
|
|
32
|
+
}
|
|
26
33
|
: undefined;
|
|
27
34
|
const AuthController = (0, auth_helper_1.createAuthController)(userEntity, { loginField, passwordField, ...login }, register, validationPipeOptions, resetPasswordOptions, updateAccount);
|
|
28
|
-
const AuthServiceProvider = (0, auth_helper_1.createAuthServiceProvider)(userEntity, { loginField, passwordField, ...login }, register.callback, resetPasswordOptions, updateAccount.callback);
|
|
35
|
+
const AuthServiceProvider = (0, auth_helper_1.createAuthServiceProvider)(userEntity, { loginField, passwordField, ...login }, register.callback, resetPasswordOptions, updateAccount.callback, register.beforeSaveCallback, updateAccount.beforeSaveCallback);
|
|
29
36
|
const LocalStrategyProvider = (0, auth_helper_1.createLocalStrategyProvider)(loginField, passwordField, login.abilityPredicate);
|
|
30
37
|
const schema = (0, helpers_1.buildSchemaFromEntity)(userEntity);
|
|
31
38
|
services_1.DynamicApiGlobalStateService.addEntitySchema(userEntity, schema);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAwC;AACxC,qCAAwC;AACxC,+CAAkD;AAClD,+CAAkD;AAClD,iEAA4D;AAC5D,2CAAmF;AAEnF,6CAA6E;AAC7E,+
|
|
1
|
+
{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
-
import { AuthAbilityPredicate, DynamicApiResetPasswordCallback, DynamicApiServiceCallback, DynamicApiWebSocketOptions } from '../../../interfaces';
|
|
2
|
+
import { AuthAbilityPredicate, DynamicApiResetPasswordCallback, DynamicApiServiceBeforeSaveCallback, DynamicApiServiceCallback, DynamicApiWebSocketOptions } from '../../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../../models';
|
|
4
4
|
type DynamicApiJWTOptions = {
|
|
5
5
|
secret: string;
|
|
@@ -13,6 +13,7 @@ type DynamicApiLoginOptions<Entity extends BaseEntity = any> = {
|
|
|
13
13
|
additionalFields?: (keyof Entity)[];
|
|
14
14
|
};
|
|
15
15
|
type DynamicApiRegisterOptions<Entity extends BaseEntity = any> = {
|
|
16
|
+
beforeSaveCallback?: DynamicApiServiceBeforeSaveCallback<Entity>;
|
|
16
17
|
callback?: DynamicApiServiceCallback<Entity>;
|
|
17
18
|
protected?: boolean;
|
|
18
19
|
abilityPredicate?: AuthAbilityPredicate;
|
|
@@ -22,6 +23,7 @@ type DynamicApiRegisterOptions<Entity extends BaseEntity = any> = {
|
|
|
22
23
|
})[];
|
|
23
24
|
};
|
|
24
25
|
type DynamicApiUpdateAccountOptions<Entity extends BaseEntity = any> = {
|
|
26
|
+
beforeSaveCallback?: DynamicApiServiceBeforeSaveCallback<Entity>;
|
|
25
27
|
callback?: DynamicApiServiceCallback<Entity>;
|
|
26
28
|
abilityPredicate?: AuthAbilityPredicate;
|
|
27
29
|
additionalFieldsToExclude?: (keyof Entity)[];
|
|
@@ -29,6 +31,7 @@ type DynamicApiUpdateAccountOptions<Entity extends BaseEntity = any> = {
|
|
|
29
31
|
type DynamicApiResetPasswordOptions<Entity extends BaseEntity = any> = {
|
|
30
32
|
emailField?: keyof Entity | string;
|
|
31
33
|
expirationInMinutes?: number;
|
|
34
|
+
beforeChangePasswordCallback?: DynamicApiServiceBeforeSaveCallback<Entity>;
|
|
32
35
|
resetPasswordCallback?: DynamicApiResetPasswordCallback<Entity>;
|
|
33
36
|
changePasswordCallback?: DynamicApiServiceCallback<Entity>;
|
|
34
37
|
changePasswordAbilityPredicate?: AuthAbilityPredicate;
|
|
@@ -139,7 +139,7 @@ function AuthControllerMixin(userEntity, loginField, passwordField, additionalRe
|
|
|
139
139
|
__decorate([
|
|
140
140
|
(0, helpers_1.RouteDecoratorsHelper)(authRegisterDecorators),
|
|
141
141
|
(0, common_1.HttpCode)(common_1.HttpStatus.CREATED),
|
|
142
|
-
(0, swagger_1.
|
|
142
|
+
(0, swagger_1.ApiCreatedResponse)({ type: AuthPresenter }),
|
|
143
143
|
(0, common_1.Post)('register'),
|
|
144
144
|
__param(0, (0, common_1.Body)()),
|
|
145
145
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-controller.mixin.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/mixins/auth-controller.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwG;AACxG,
|
|
1
|
+
{"version":3,"file":"auth-controller.mixin.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/mixins/auth-controller.mixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,8 @@ function AuthPoliciesGuardMixin(entity, abilityPredicate) {
|
|
|
17
17
|
this.abilityPredicate = abilityPredicate;
|
|
18
18
|
}
|
|
19
19
|
canActivate(context) {
|
|
20
|
-
const { user } = context.switchToHttp().getRequest();
|
|
21
|
-
if (this.abilityPredicate && (!user || !this.abilityPredicate(user))) {
|
|
20
|
+
const { user, body } = context.switchToHttp().getRequest();
|
|
21
|
+
if (this.abilityPredicate && (!user || !this.abilityPredicate(user, body))) {
|
|
22
22
|
throw new common_1.ForbiddenException('Access denied');
|
|
23
23
|
}
|
|
24
24
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-policies-guard.mixin.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/mixins/auth-policies-guard.mixin.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwF;AACxF,mDAAiD;AAGjD,sCAA+C;AAE/C,SAAS,sBAAsB,CAC7B,MAAoB,EACpB,gBAAkD;IAGlD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;QAA3B;YACY,WAAM,GAAG,MAAM,CAAC;YAChB,qBAAgB,GAAG,gBAAgB,CAAC;QAahD,CAAC;QAXC,WAAW,CAAC,OAAyB;YACnC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-policies-guard.mixin.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/mixins/auth-policies-guard.mixin.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwF;AACxF,mDAAiD;AAGjD,sCAA+C;AAE/C,SAAS,sBAAsB,CAC7B,MAAoB,EACpB,gBAAkD;IAGlD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;QAA3B;YACY,WAAM,GAAG,MAAM,CAAC;YAChB,qBAAgB,GAAG,gBAAgB,CAAC;QAahD,CAAC;QAXC,WAAW,CAAC,OAAyB;YACnC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;YAE3D,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAC3B,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAC5C,EAAE,CAAC;gBACF,MAAM,IAAI,2BAAkB,CAAC,eAAe,CAAC,CAAC;YAChD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAA;IAfK,qBAAqB;QAD1B,IAAA,mBAAU,GAAE;OACP,qBAAqB,CAe1B;IAED,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AA+BQ,wDAAsB;AA7B/B,SAAS,4BAA4B,CACnC,MAAoB,EACpB,gBAAkD;IAGlD,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,2BAAkB;QAA5D;;YACY,WAAM,GAAG,MAAM,CAAC;YAChB,qBAAgB,GAAG,gBAAgB,CAAC;QAiBhD,CAAC;QAfU,KAAK,CAAC,WAAW,CAAC,OAAyB;YAClD,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAEnC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;gBAE/D,MAAM,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;gBAE3D,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxD,MAAM,IAAI,wBAAW,CAAC,eAAe,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAA;IAnBK,2BAA2B;QADhC,IAAA,mBAAU,GAAE;OACP,2BAA2B,CAmBhC;IAED,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAEgC,oEAA4B"}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
import { Type } from '@nestjs/common';
|
|
26
26
|
import { JwtService } from '@nestjs/jwt';
|
|
27
27
|
import { Model } from 'mongoose';
|
|
28
|
-
import { DynamicApiServiceCallback } from '../../../interfaces';
|
|
28
|
+
import { DynamicApiServiceBeforeSaveCallback, DynamicApiServiceCallback } from '../../../interfaces';
|
|
29
29
|
import { BaseEntity } from '../../../models';
|
|
30
30
|
import { BaseService, BcryptService } from '../../../services';
|
|
31
31
|
import { DynamicApiResetPasswordOptions } from '../interfaces';
|
|
@@ -37,7 +37,9 @@ export declare abstract class BaseAuthService<Entity extends BaseEntity> extends
|
|
|
37
37
|
protected loginField: keyof Entity;
|
|
38
38
|
protected passwordField: keyof Entity;
|
|
39
39
|
protected additionalRequestFields: (keyof Entity)[];
|
|
40
|
+
protected beforeRegisterCallback: DynamicApiServiceBeforeSaveCallback<Entity>;
|
|
40
41
|
protected registerCallback: DynamicApiServiceCallback<Entity> | undefined;
|
|
42
|
+
protected beforeUpdateAccountCallback: DynamicApiServiceBeforeSaveCallback<Entity>;
|
|
41
43
|
protected updateAccountCallback: DynamicApiServiceCallback<Entity> | undefined;
|
|
42
44
|
protected loginCallback: DynamicApiServiceCallback<Entity> | undefined;
|
|
43
45
|
protected resetPasswordOptions: DynamicApiResetPasswordOptions<Entity> | undefined;
|
|
@@ -21,12 +21,7 @@ class BaseAuthService extends services_1.BaseService {
|
|
|
21
21
|
if (!user || !isPasswordValid) {
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
'_id',
|
|
26
|
-
this.loginField,
|
|
27
|
-
...this.additionalRequestFields,
|
|
28
|
-
];
|
|
29
|
-
return this.buildUserFields(user, fieldsToBuild);
|
|
24
|
+
return { ...user, id: user._id.toString() };
|
|
30
25
|
}
|
|
31
26
|
async login(user, fromMember = false) {
|
|
32
27
|
this.verifyArguments(user);
|
|
@@ -53,6 +48,10 @@ class BaseAuthService extends services_1.BaseService {
|
|
|
53
48
|
this.checkFieldsValidity(userToCreate);
|
|
54
49
|
try {
|
|
55
50
|
const hashedPassword = await this.bcryptService.hashPassword(userToCreate[this.passwordField]);
|
|
51
|
+
if (this.beforeRegisterCallback) {
|
|
52
|
+
userToCreate =
|
|
53
|
+
await this.beforeRegisterCallback(userToCreate, { hashedPassword }, this.callbackMethods);
|
|
54
|
+
}
|
|
56
55
|
const created = await this.model.create({ ...userToCreate, [this.passwordField]: hashedPassword });
|
|
57
56
|
if (this.registerCallback) {
|
|
58
57
|
const user = (await this.model.findOne({ _id: created._id }).lean().exec());
|
|
@@ -79,6 +78,11 @@ class BaseAuthService extends services_1.BaseService {
|
|
|
79
78
|
}
|
|
80
79
|
async updateAccount({ id }, update) {
|
|
81
80
|
this.verifyArguments(id, update);
|
|
81
|
+
if (this.beforeUpdateAccountCallback) {
|
|
82
|
+
const user = (await this.model.findOne({ _id: id }).lean().exec());
|
|
83
|
+
update =
|
|
84
|
+
await this.beforeUpdateAccountCallback({ ...user, id: user._id.toString() }, { update }, this.callbackMethods);
|
|
85
|
+
}
|
|
82
86
|
await this.model.updateOne({ _id: id }, { $set: update }).exec();
|
|
83
87
|
if (this.updateAccountCallback) {
|
|
84
88
|
const fullUser = (await this.model.findOne({ _id: id }).lean().exec());
|
|
@@ -148,11 +152,14 @@ class BaseAuthService extends services_1.BaseService {
|
|
|
148
152
|
return;
|
|
149
153
|
}
|
|
150
154
|
const hashedPassword = await this.bcryptService.hashPassword(newPassword);
|
|
151
|
-
|
|
155
|
+
if (this.resetPasswordOptions?.beforeChangePasswordCallback) {
|
|
156
|
+
const user = (await this.model.findOne({ _id: userId }).lean().exec());
|
|
157
|
+
await this.resetPasswordOptions.beforeChangePasswordCallback({ ...user, id: user._id.toString() }, { resetPasswordToken, newPassword, hashedPassword }, this.callbackMethods);
|
|
158
|
+
}
|
|
159
|
+
await this.model.updateOne({ _id: userId }, { $set: { [this.passwordField]: hashedPassword, resetPasswordToken: null } });
|
|
152
160
|
if (this.resetPasswordOptions?.changePasswordCallback) {
|
|
153
161
|
const user = (await this.model.findOne({ _id: userId }).lean().exec());
|
|
154
|
-
|
|
155
|
-
await this.resetPasswordOptions.changePasswordCallback(instance, this.callbackMethods);
|
|
162
|
+
await this.resetPasswordOptions.changePasswordCallback({ ...user, id: user._id.toString() }, this.callbackMethods);
|
|
156
163
|
}
|
|
157
164
|
}
|
|
158
165
|
buildUserFields(user, fieldsToBuild) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-auth.service.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/services/base-auth.service.ts"],"names":[],"mappings":";;;AAAA,2CAA8G;AAK9G,gDAA+D;AAG/D,MAAsB,eAA2C,SAAQ,sBAAmB;
|
|
1
|
+
{"version":3,"file":"base-auth.service.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/services/base-auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseEntity } from '../../models';
|
|
2
2
|
import { AggregateService } from './aggregate-service.interface';
|
|
3
3
|
interface AggregateController<Entity extends BaseEntity, Query = any, Response = any> {
|
|
4
|
-
aggregate(query: Query): Promise<
|
|
4
|
+
aggregate(query: Query): Promise<Entity[] | Response[] | Response>;
|
|
5
5
|
}
|
|
6
6
|
type AggregateControllerConstructor<Entity extends BaseEntity> = new (service: AggregateService<Entity>) => AggregateController<Entity>;
|
|
7
7
|
export type { AggregateController, AggregateControllerConstructor };
|
|
@@ -2,5 +2,5 @@ import { Type } from '@nestjs/common';
|
|
|
2
2
|
import { DynamicApiControllerOptions, DynamicAPIRouteConfig } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { AggregateControllerConstructor } from './aggregate-controller.interface';
|
|
5
|
-
declare function AggregateControllerMixin<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, { dTOs, ...routeConfig }: DynamicAPIRouteConfig<Entity>, version?: string): AggregateControllerConstructor<Entity>;
|
|
5
|
+
declare function AggregateControllerMixin<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, { dTOs, isArrayResponse, ...routeConfig }: DynamicAPIRouteConfig<Entity>, version?: string): AggregateControllerConstructor<Entity>;
|
|
6
6
|
export { AggregateControllerMixin };
|
|
@@ -14,12 +14,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.AggregateControllerMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
|
-
const lodash_1 = require("lodash");
|
|
18
17
|
const builders_1 = require("../../builders");
|
|
19
18
|
const helpers_1 = require("../../helpers");
|
|
20
19
|
const mixins_1 = require("../../mixins");
|
|
21
20
|
const aggregate_presenter_mixin_1 = require("./aggregate-presenter.mixin");
|
|
22
|
-
function AggregateControllerMixin(entity, controllerOptions, { dTOs, ...routeConfig }, version) {
|
|
21
|
+
function AggregateControllerMixin(entity, controllerOptions, { dTOs, isArrayResponse, ...routeConfig }, version) {
|
|
23
22
|
const { routeType, displayedName, description, isPublic, abilityPredicate, } = (0, helpers_1.getMixinData)(entity, controllerOptions, routeConfig);
|
|
24
23
|
if (!dTOs?.query) {
|
|
25
24
|
throw new common_1.BadRequestException('Query DTO is required');
|
|
@@ -40,8 +39,9 @@ function AggregateControllerMixin(entity, controllerOptions, { dTOs, ...routeCon
|
|
|
40
39
|
});
|
|
41
40
|
const routeDecoratorsBuilder = new builders_1.RouteDecoratorsBuilder(routeType, entity, routeConfig.subPath, version, description, isPublic, {
|
|
42
41
|
presenter: AggregatePresenter,
|
|
43
|
-
});
|
|
44
|
-
|
|
42
|
+
}, isArrayResponse);
|
|
43
|
+
const toPipeline = AggregateQuery.toPipeline;
|
|
44
|
+
class AggregatePoliciesGuard extends (0, mixins_1.CreatePoliciesGuardMixin)(entity, routeType, displayedName, version, abilityPredicate, toPipeline) {
|
|
45
45
|
}
|
|
46
46
|
class BaseAggregateController {
|
|
47
47
|
constructor(service) {
|
|
@@ -49,16 +49,17 @@ function AggregateControllerMixin(entity, controllerOptions, { dTOs, ...routeCon
|
|
|
49
49
|
this.entity = entity;
|
|
50
50
|
}
|
|
51
51
|
async aggregate(query) {
|
|
52
|
-
if ((0, lodash_1.isEmpty)(query)) {
|
|
53
|
-
throw new common_1.BadRequestException('Invalid query');
|
|
54
|
-
}
|
|
55
52
|
const toPipeline = AggregateQuery.toPipeline;
|
|
56
53
|
if (!toPipeline) {
|
|
57
54
|
throw new common_1.BadRequestException('Query DTO must have toPipeline static method');
|
|
58
55
|
}
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
const pipelineBuilt = toPipeline(query);
|
|
57
|
+
if (!pipelineBuilt.length) {
|
|
58
|
+
throw new common_1.BadRequestException('Invalid pipeline, no stages found');
|
|
59
|
+
}
|
|
60
|
+
const { list, count, totalPage } = await this.service.aggregate(pipelineBuilt);
|
|
61
|
+
const fromAggregate = AggregatePresenter.fromAggregate;
|
|
62
|
+
return fromAggregate ? fromAggregate(list, count, totalPage) : list;
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/aggregate-controller.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"aggregate-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/aggregate-controller.mixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { ExtendedSocket, GatewayResponse } from '../../interfaces';
|
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { AggregateService } from './aggregate-service.interface';
|
|
5
5
|
interface AggregateGateway<Entity extends BaseEntity, Data = any, Response = any> {
|
|
6
|
-
aggregate(socket: ExtendedSocket, body: Data): GatewayResponse<
|
|
6
|
+
aggregate(socket: ExtendedSocket, body: Data): GatewayResponse<Entity[] | Response[] | Response>;
|
|
7
7
|
}
|
|
8
8
|
type AggregateGatewayConstructor<Entity extends BaseEntity> = new (service: AggregateService<Entity>, jwtService: JwtService) => AggregateGateway<Entity>;
|
|
9
9
|
export type { AggregateGateway, AggregateGatewayConstructor };
|
|
@@ -16,7 +16,7 @@ exports.AggregateGatewayMixin = void 0;
|
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const websockets_1 = require("@nestjs/websockets");
|
|
18
18
|
const lodash_1 = require("lodash");
|
|
19
|
-
const
|
|
19
|
+
const filters_1 = require("../../filters");
|
|
20
20
|
const gateways_1 = require("../../gateways");
|
|
21
21
|
const helpers_1 = require("../../helpers");
|
|
22
22
|
const aggregate_presenter_mixin_1 = require("./aggregate-presenter.mixin");
|
|
@@ -55,16 +55,16 @@ function AggregateGatewayMixin(entity, controllerOptions, { dTOs, ...routeConfig
|
|
|
55
55
|
throw new websockets_1.WsException('Query DTO must have toPipeline static method');
|
|
56
56
|
}
|
|
57
57
|
this.addUserToSocket(socket, isPublic);
|
|
58
|
-
const list = await this.service.aggregate(toPipeline(body));
|
|
59
|
-
const
|
|
58
|
+
const { list, count, totalPage } = await this.service.aggregate(toPipeline(body));
|
|
59
|
+
const fromAggregate = AggregateResponse.fromAggregate;
|
|
60
60
|
return {
|
|
61
61
|
event,
|
|
62
|
-
data:
|
|
62
|
+
data: fromAggregate ? fromAggregate(list, count, totalPage) : list,
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
__decorate([
|
|
67
|
-
(0, common_1.UseFilters)(new
|
|
67
|
+
(0, common_1.UseFilters)(new filters_1.DynamicAPIWsExceptionFilter()),
|
|
68
68
|
(0, websockets_1.SubscribeMessage)(event),
|
|
69
69
|
__param(0, (0, websockets_1.ConnectedSocket)()),
|
|
70
70
|
__param(1, (0, websockets_1.MessageBody)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-gateway.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/aggregate-gateway.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAkD;AAElD,mDAAiG;AACjG,mCAAiC;AACjC,
|
|
1
|
+
{"version":3,"file":"aggregate-gateway.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/aggregate-gateway.mixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { PipelineStage } from 'mongodb-pipeline-builder';
|
|
2
2
|
import { BaseEntity } from '../../models';
|
|
3
|
+
type AggregateServiceResponse<Entity extends BaseEntity> = {
|
|
4
|
+
list: Entity[];
|
|
5
|
+
count: number;
|
|
6
|
+
totalPage: number;
|
|
7
|
+
};
|
|
3
8
|
interface AggregateService<Entity extends BaseEntity> {
|
|
4
|
-
aggregate(pipeline: PipelineStage[]): Promise<Entity
|
|
9
|
+
aggregate(pipeline: PipelineStage[]): Promise<AggregateServiceResponse<Entity>>;
|
|
5
10
|
}
|
|
6
|
-
export type { AggregateService };
|
|
11
|
+
export type { AggregateService, AggregateServiceResponse };
|
|
@@ -34,5 +34,10 @@ export declare abstract class BaseAggregateService<Entity extends BaseEntity> ex
|
|
|
34
34
|
protected readonly entity: Type<Entity>;
|
|
35
35
|
protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
|
|
36
36
|
protected constructor(model: Model<Entity>);
|
|
37
|
-
aggregate(pipeline: PipelineStage[]): Promise<
|
|
37
|
+
aggregate(pipeline: PipelineStage[]): Promise<{
|
|
38
|
+
list: Entity[];
|
|
39
|
+
count: number;
|
|
40
|
+
totalPage: number;
|
|
41
|
+
}>;
|
|
42
|
+
private withPagination;
|
|
38
43
|
}
|
|
@@ -10,18 +10,40 @@ class BaseAggregateService extends services_1.BaseService {
|
|
|
10
10
|
}
|
|
11
11
|
async aggregate(pipeline) {
|
|
12
12
|
try {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
let documents;
|
|
14
|
+
let count;
|
|
15
|
+
let totalPage;
|
|
16
|
+
if (this.withPagination(pipeline)) {
|
|
17
|
+
const pagingResult = await (0, mongodb_pipeline_builder_1.GetPagingResult)(this.model, pipeline);
|
|
18
|
+
documents = pagingResult.GetDocs();
|
|
19
|
+
count = pagingResult.GetCount();
|
|
20
|
+
totalPage = pagingResult.GetTotalPageNumber();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const result = await (0, mongodb_pipeline_builder_1.GetResult)(this.model, pipeline);
|
|
24
|
+
documents = result.GetDocs();
|
|
25
|
+
count = result.GetCount();
|
|
26
|
+
totalPage = 1;
|
|
27
|
+
}
|
|
15
28
|
if (this.callback && documents.length) {
|
|
16
29
|
await Promise.all(documents.map((document) => this.callback(document, this.callbackMethods)));
|
|
17
30
|
}
|
|
18
|
-
return documents.map((d) => this.buildInstance(d));
|
|
31
|
+
return { list: documents.map((d) => this.buildInstance(d)), count, totalPage };
|
|
19
32
|
}
|
|
20
33
|
catch (error) {
|
|
21
34
|
this.handleMongoErrors(error, false);
|
|
22
35
|
this.handleDuplicateKeyError(error);
|
|
23
36
|
}
|
|
24
37
|
}
|
|
38
|
+
withPagination(pipeline) {
|
|
39
|
+
const firstStageFacet = pipeline[0].$facet;
|
|
40
|
+
if (!firstStageFacet) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const hasValidDocs = Array.isArray(firstStageFacet.docs) && firstStageFacet.docs.length > 0;
|
|
44
|
+
const hasValidCount = Array.isArray(firstStageFacet.count) && firstStageFacet.count.length > 0;
|
|
45
|
+
return hasValidDocs && hasValidCount;
|
|
46
|
+
}
|
|
25
47
|
}
|
|
26
48
|
exports.BaseAggregateService = BaseAggregateService;
|
|
27
49
|
//# sourceMappingURL=base-aggregate.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-aggregate.service.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/base-aggregate.service.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"base-aggregate.service.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/base-aggregate.service.ts"],"names":[],"mappings":";;;AACA,uEAAqF;AAIrF,6CAA6C;AAG7C,MAAsB,oBACpB,SAAQ,sBAAmB;IAM3B,YAAyC,KAAoB;QAC3D,KAAK,CAAC,KAAK,CAAC,CAAC;QAD0B,UAAK,GAAL,KAAK,CAAe;IAE7D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAyB;QACvC,IAAI,CAAC;YACH,IAAI,SAAmB,CAAC;YACxB,IAAI,KAAa,CAAC;YAClB,IAAI,SAAiB,CAAC;YAEtB,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,MAAM,IAAA,0CAAe,EAAS,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACzE,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;gBACnC,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAChC,SAAS,GAAG,YAAY,CAAC,kBAAkB,EAAE,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAS,EAAS,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7D,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7B,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC1B,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtC,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CACX,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAC5D,CACF,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACjF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,QAAyB;QAC9C,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5F,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAE/F,OAAO,YAAY,IAAI,aAAa,CAAC;IACvC,CAAC;CACF;AAvDD,oDAuDC"}
|
|
@@ -16,7 +16,7 @@ exports.CreateManyGatewayMixin = void 0;
|
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const websockets_1 = require("@nestjs/websockets");
|
|
18
18
|
const lodash_1 = require("lodash");
|
|
19
|
-
const
|
|
19
|
+
const filters_1 = require("../../filters");
|
|
20
20
|
const gateways_1 = require("../../gateways");
|
|
21
21
|
const helpers_1 = require("../../helpers");
|
|
22
22
|
const create_many_body_mixin_1 = require("./create-many-body.mixin");
|
|
@@ -63,7 +63,7 @@ function CreateManyGatewayMixin(entity, controllerOptions, { dTOs, ...routeConfi
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
__decorate([
|
|
66
|
-
(0, common_1.UseFilters)(new
|
|
66
|
+
(0, common_1.UseFilters)(new filters_1.DynamicAPIWsExceptionFilter()),
|
|
67
67
|
(0, websockets_1.SubscribeMessage)(event),
|
|
68
68
|
__param(0, (0, websockets_1.ConnectedSocket)()),
|
|
69
69
|
__param(1, (0, websockets_1.MessageBody)()),
|