import { User, Username } from "@contexts/auth/domain"; import { EmailAddress, UniqueID } from "core/common/domain"; import { Result } from "core/common/helpers"; import { ISequelizeMapper, MapperParamsType, SequelizeMapper, } from "core/common/infrastructure/sequelize/sequelize-mapper"; import { UserCreationAttributes, UserModel } from "../sequelize"; export interface IUserMapper extends ISequelizeMapper {} class UserMapper extends SequelizeMapper implements IUserMapper { public mapToDomain(source: UserModel, params?: MapperParamsType): Result { // Crear Value Objects asegurando que sean válidos const uniqueIdResult = UniqueID.create(source.id); const usernameResult = Username.create(source.username); const emailResult = EmailAddress.create(source.email); // Validar que no haya errores en la creación de los Value Objects const okOrError = Result.combine([uniqueIdResult, usernameResult, emailResult]); if (okOrError.isFailure) { return Result.fail(okOrError.error.message); } // Crear el agregado de dominio return User.create( { username: usernameResult.data!, email: emailResult.data!, roles: [], //roles: entity.roles || [], }, uniqueIdResult.data! ); } public mapToPersistence( source: User, params?: MapperParamsType ): Result { return Result.ok({ id: source.id.toString(), username: source.username.toString(), email: source.email.toString(), //roles: source.getRoles().map((role) => role.toString()), }); } } const userMapper: IUserMapper = new UserMapper(); export { userMapper };