import { Result, UniqueID } from "@common/domain"; import { AuthenticatedUser, EmailAddress, Username } from "@contexts/auth/domain"; export class AuthenticatedUserMapper { /** * 🔹 Convierte una entidad de la base de datos en un agregado de dominio `AuthenticatedUser` */ static toDomain(entity: any): Result { if (!entity) { return Result.fail(new Error("Entity not found")); } // Crear Value Objects asegurando que sean válidos const uniqueIdResult = UniqueID.create(entity.id); const usernameResult = Username.create(entity.username); const emailResult = EmailAddress.create(entity.email); // Validar que no haya errores en la creación de los Value Objects const okOrError = Result.combine([uniqueIdResult, usernameResult, emailResult]); if (okOrError.isError()) { return okOrError; } // Crear el agregado de dominio return AuthenticatedUser.create( { username: usernameResult.data!, email: emailResult.data!, roles: entity.roles || [], token: entity.token, }, uniqueIdResult.data! ); } /** * 🔹 Convierte un agregado `AuthenticatedUser` en un objeto listo para persistencia */ static toPersistence(authenticatedUser: AuthenticatedUser): any { return authenticatedUser.toPersistenceData(); } }