mongodb-dynamic-api
Version:
Auto generated CRUD API for MongoDB using NestJS
177 lines • 9.23 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthControllerMixin = void 0;
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const builders_1 = require("../../../builders");
const decorators_1 = require("../../../decorators");
const helpers_1 = require("../../../helpers");
const mixins_1 = require("../../../mixins");
const change_password_dto_1 = require("../dtos/change-password.dto");
const reset_password_dto_1 = require("../dtos/reset-password.dto");
const guards_1 = require("../guards");
const auth_policies_guard_mixin_1 = require("./auth-policies-guard.mixin");
function AuthControllerMixin(userEntity, { loginField, passwordField, additionalFields: additionalRequestFields = [], useInterceptors: loginUseInterceptors = [], }, { additionalFields: additionalRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors = [], } = {}, { resetPasswordUseInterceptors = [], changePasswordUseInterceptors = [], ...resetPasswordOptions } = {}, { useInterceptors: updateAccountUseInterceptors = [], ...updateAccountOptions } = {}) {
var _a;
if (!loginField || !passwordField) {
throw new Error('Login and password fields are required');
}
class AuthBodyPasswordFieldDto extends (0, swagger_1.PickType)(userEntity, [passwordField]) {
}
_a = passwordField;
__decorate([
(0, swagger_1.ApiProperty)(),
__metadata("design:type", String)
], AuthBodyPasswordFieldDto.prototype, _a, void 0);
class AuthLoginDto extends (0, swagger_1.IntersectionType)((0, swagger_1.PickType)(userEntity, [loginField]), AuthBodyPasswordFieldDto) {
}
const additionalMandatoryFields = [];
const additionalOptionalFields = [];
if (!additionalRegisterFields) {
additionalRegisterFields = [];
}
additionalRegisterFields.forEach((field) => {
if (typeof field === 'string') {
additionalOptionalFields.push(field);
return;
}
const { required, name } = field;
if (required) {
additionalMandatoryFields.push(name);
}
else {
additionalOptionalFields.push(name);
}
});
class AuthRegisterDto extends (0, swagger_1.IntersectionType)((0, swagger_1.PickType)(userEntity, [loginField, ...additionalMandatoryFields]), additionalOptionalFields?.length
? (0, swagger_1.IntersectionType)(AuthBodyPasswordFieldDto, (0, swagger_1.PartialType)((0, swagger_1.PickType)(userEntity, additionalOptionalFields)))
: AuthBodyPasswordFieldDto) {
}
class AuthUpdateAccountDto extends (0, mixins_1.EntityBodyMixin)(userEntity, true, [
loginField,
passwordField,
...updateAccountOptions.additionalFieldsToExclude ?? [],
]) {
}
class AuthPresenter {
}
__decorate([
(0, swagger_1.ApiProperty)(),
__metadata("design:type", String)
], AuthPresenter.prototype, "accessToken", void 0);
class AuthUserPresenter extends (0, swagger_1.PickType)(userEntity, ['id', loginField, ...additionalRequestFields]) {
}
class AuthRegisterPoliciesGuard extends (0, auth_policies_guard_mixin_1.AuthPoliciesGuardMixin)(userEntity, registerAbilityPredicate) {
}
const authRegisterDecorators = new builders_1.AuthDecoratorsBuilder(registerProtected, AuthRegisterPoliciesGuard);
class AuthUpdateAccountPoliciesGuard extends (0, auth_policies_guard_mixin_1.AuthPoliciesGuardMixin)(userEntity, updateAccountOptions.abilityPredicate) {
}
const authUpdateAccountDecorators = new builders_1.AuthDecoratorsBuilder(true, AuthUpdateAccountPoliciesGuard);
class BaseAuthController {
constructor(service) {
this.service = service;
}
getAccount(req) {
return this.service.getAccount(req.user);
}
changePassword({ resetPasswordToken, newPassword }) {
return this.service.changePassword(resetPasswordToken, newPassword);
}
login(req, _) {
return this.service.login(req.user);
}
register(body) {
return this.service.register(body);
}
resetPassword({ email }) {
return this.service.resetPassword(email);
}
updateAccount(req, body) {
return this.service.updateAccount(req.user, body);
}
}
__decorate([
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(guards_1.JwtAuthGuard),
(0, common_1.HttpCode)(common_1.HttpStatus.OK),
(0, swagger_1.ApiOkResponse)({ type: AuthUserPresenter }),
(0, common_1.Get)('account'),
__param(0, (0, common_1.Request)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], BaseAuthController.prototype, "getAccount", null);
__decorate([
(0, decorators_1.ApiEndpointVisibility)(!!resetPasswordOptions, (0, decorators_1.Public)()),
(0, common_1.UseGuards)(new guards_1.ResetPasswordGuard(!!resetPasswordOptions.emailField)),
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
(0, common_1.UseInterceptors)(...changePasswordUseInterceptors),
(0, common_1.Patch)('change-password'),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [change_password_dto_1.ChangePasswordDto]),
__metadata("design:returntype", void 0)
], BaseAuthController.prototype, "changePassword", null);
__decorate([
(0, decorators_1.Public)(),
(0, common_1.UseGuards)(guards_1.LocalAuthGuard),
(0, common_1.HttpCode)(common_1.HttpStatus.OK),
(0, swagger_1.ApiOkResponse)({ type: AuthPresenter }),
(0, common_1.UseInterceptors)(...loginUseInterceptors),
(0, common_1.Post)('login'),
__param(0, (0, common_1.Request)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, AuthLoginDto]),
__metadata("design:returntype", void 0)
], BaseAuthController.prototype, "login", null);
__decorate([
(0, helpers_1.RouteDecoratorsHelper)(authRegisterDecorators),
(0, common_1.HttpCode)(common_1.HttpStatus.CREATED),
(0, swagger_1.ApiCreatedResponse)({ type: AuthPresenter }),
(0, common_1.UseInterceptors)(...registerUseInterceptors),
(0, common_1.Post)('register'),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [AuthRegisterDto]),
__metadata("design:returntype", void 0)
], BaseAuthController.prototype, "register", null);
__decorate([
(0, decorators_1.ApiEndpointVisibility)(!!resetPasswordOptions, (0, decorators_1.Public)()),
(0, common_1.UseGuards)(new guards_1.ResetPasswordGuard(!!resetPasswordOptions.emailField)),
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
(0, common_1.UseInterceptors)(...resetPasswordUseInterceptors),
(0, common_1.Post)('reset-password'),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [reset_password_dto_1.ResetPasswordDto]),
__metadata("design:returntype", void 0)
], BaseAuthController.prototype, "resetPassword", null);
__decorate([
(0, helpers_1.RouteDecoratorsHelper)(authUpdateAccountDecorators),
(0, common_1.HttpCode)(common_1.HttpStatus.OK),
(0, swagger_1.ApiOkResponse)({ type: AuthUserPresenter }),
(0, common_1.UseInterceptors)(...updateAccountUseInterceptors),
(0, common_1.Patch)('account'),
__param(0, (0, common_1.Request)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, AuthUpdateAccountDto]),
__metadata("design:returntype", void 0)
], BaseAuthController.prototype, "updateAccount", null);
return BaseAuthController;
}
exports.AuthControllerMixin = AuthControllerMixin;
//# sourceMappingURL=auth-controller.mixin.js.map