Uecko_ERP/apps/server/src/contexts/auth/domain/auth-user.model.ts

48 lines
1.3 KiB
TypeScript
Raw Normal View History

2025-01-30 10:45:31 +00:00
import { Result } from "contexts/common/domain";
2025-01-29 19:02:59 +00:00
import { EmailAddress, PasswordHash, Username, UserRoles } from "./value-objects";
export class AuthUser {
private constructor(
public readonly id: number | null,
public readonly username: Username,
public readonly email: EmailAddress,
private password: PasswordHash,
public readonly roles: UserRoles,
public readonly isActive: boolean
) {}
static async create(
id: number | null,
username: string,
email: string | null,
plainPassword: string,
roles: string[],
isActive: boolean
): Promise<Result<AuthUser, Error>> {
const usernameResult = Username.create(username);
const emailResult = EmailAddress.create(email);
const passwordResult = await PasswordHash.create(plainPassword);
const rolesResult = UserRoles.create(roles);
const combined = Result.combine([usernameResult, emailResult, passwordResult, rolesResult]);
if (combined.isError()) {
return Result.fail(combined.error);
}
return Result.ok(
new AuthUser(
id,
usernameResult.data,
emailResult.data,
passwordResult.data,
rolesResult.data,
isActive
)
);
}
async validatePassword(plainPassword: string): Promise<boolean> {
return await this.password.compare(plainPassword);
}
}