Uecko_ERP/apps/server/archive/contexts/auth/infraestructure/mappers/authenticated-user.mapper.ts

70 lines
2.1 KiB
TypeScript
Raw Normal View History

2025-05-02 21:43:51 +00:00
import {
EmailAddress,
ISequelizeMapper,
MapperParamsType,
Result,
SequelizeMapper,
UniqueID,
} from "@/core";
2025-05-04 20:06:57 +00:00
import { AuthUserCreationAttributes, AuthUserModel } from '../sequelize';
import { AuthenticatedUser, HashPassword, Username } from '../../domain';
2025-02-01 21:48:13 +00:00
2025-02-21 10:06:27 +00:00
export interface IAuthenticatedUserMapper
extends ISequelizeMapper<AuthUserModel, AuthUserCreationAttributes, AuthenticatedUser> {}
2025-02-01 21:48:13 +00:00
2025-02-21 10:06:27 +00:00
export class AuthenticatedUserMapper
extends SequelizeMapper<AuthUserModel, AuthUserCreationAttributes, AuthenticatedUser>
implements IAuthenticatedUserMapper
{
public mapToDomain(
source: AuthUserModel,
params?: MapperParamsType
): Result<AuthenticatedUser, Error> {
2025-02-01 21:48:13 +00:00
// Crear Value Objects asegurando que sean válidos
2025-02-21 10:06:27 +00:00
const uniqueIdResult = UniqueID.create(source.id);
const usernameResult = Username.create(source.username);
const passwordHashResult = HashPassword.createFromHash(source.hash_password);
const emailResult = EmailAddress.create(source.email);
2025-02-04 14:58:33 +00:00
2025-02-01 21:48:13 +00:00
// Validar que no haya errores en la creación de los Value Objects
2025-02-03 13:12:36 +00:00
const okOrError = Result.combine([
uniqueIdResult,
usernameResult,
passwordHashResult,
emailResult,
]);
if (okOrError.isFailure) {
return Result.fail(okOrError.error.message);
2025-02-01 21:48:13 +00:00
}
// Crear el agregado de dominio
return AuthenticatedUser.create(
{
username: usernameResult.data!,
email: emailResult.data!,
2025-02-05 20:40:59 +00:00
hashPassword: passwordHashResult.data!,
2025-02-21 10:06:27 +00:00
roles: source.roles || [],
2025-02-01 21:48:13 +00:00
},
uniqueIdResult.data!
);
}
2025-02-21 10:06:27 +00:00
public mapToPersistence(
source: AuthenticatedUser,
params?: MapperParamsType
2025-05-04 20:06:57 +00:00
): AuthUserCreationAttributes {
return {
2025-02-21 10:06:27 +00:00
id: source.id.toString(),
username: source.username.toString(),
email: source.email.toString(),
hash_password: source.hashPassword.toString(),
roles: source.getRoles().map((role) => role.toString()),
//access_token: source.accessToken,
//refresh_token: source.refreshToken,
2025-05-04 20:06:57 +00:00
};
2025-02-01 21:48:13 +00:00
}
}
2025-02-03 13:12:36 +00:00
2025-02-15 21:30:12 +00:00
const authenticatedUserMapper: IAuthenticatedUserMapper = new AuthenticatedUserMapper();
export { authenticatedUserMapper };