fase(9): auth module with casl rbac and session management
This commit is contained in:
51
dist/modules/auth/application/commands/RegisterCommand.js
vendored
Normal file
51
dist/modules/auth/application/commands/RegisterCommand.js
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.RegisterCommand = void 0;
|
||||
const Result_1 = require("../../../../shared/domain/Result");
|
||||
const User_1 = require("../../domain/entities/User");
|
||||
const Email_1 = require("../../domain/value-objects/Email");
|
||||
const Role_1 = require("../../domain/value-objects/Role");
|
||||
class RegisterCommand {
|
||||
constructor(userRepository, eventBus, hashPassword) {
|
||||
this.userRepository = userRepository;
|
||||
this.eventBus = eventBus;
|
||||
this.hashPassword = hashPassword;
|
||||
}
|
||||
async execute(request) {
|
||||
let email;
|
||||
try {
|
||||
email = Email_1.Email.create(request.email);
|
||||
}
|
||||
catch {
|
||||
return (0, Result_1.Err)('Invalid email address');
|
||||
}
|
||||
const existing = await this.userRepository.findByEmail(email.value);
|
||||
if (existing) {
|
||||
return (0, Result_1.Err)('Email already registered');
|
||||
}
|
||||
if (request.password.length < 8) {
|
||||
return (0, Result_1.Err)('Password must be at least 8 characters');
|
||||
}
|
||||
let role;
|
||||
try {
|
||||
role = request.role ? Role_1.Role.create(request.role) : Role_1.Role.member();
|
||||
}
|
||||
catch {
|
||||
return (0, Result_1.Err)('Invalid role');
|
||||
}
|
||||
const passwordHash = await this.hashPassword(request.password);
|
||||
const user = User_1.User.create({ email, name: request.name, passwordHash, role });
|
||||
await this.userRepository.save(user);
|
||||
for (const event of user.domainEvents) {
|
||||
await this.eventBus.publish(event);
|
||||
}
|
||||
user.clearEvents();
|
||||
return (0, Result_1.Ok)({
|
||||
userId: user.id.toString(),
|
||||
email: user.email.value,
|
||||
name: user.name,
|
||||
role: user.role.value,
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.RegisterCommand = RegisterCommand;
|
||||
Reference in New Issue
Block a user