Uecko_ERP/apps/server/src/contexts/auth/infraestructure/mappers/tab-context.mapper.ts

47 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-02-04 14:58:33 +00:00
import { Result, UniqueID } from "@common/domain";
import { EmailAddress, PasswordHash, TabContext, Username } from "@contexts/auth/domain";
import { ITabContextMapper } from "./tab-context-mapper.interface";
export class TabContextMapper implements ITabContextMapper {
toDomain(entity: any): Result<TabContext, Error> {
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 userIdResult = Username.create(entity.user_id);
const companyIdResult = PasswordHash.create(entity.passwordHash);
const brachIdResult = EmailAddress.create(entity.email);
// Validar que no haya errores en la creación de los Value Objects
const okOrError = Result.combine([
uniqueIdResult,
usernameResult,
companyIdResult,
emailResult,
]);
if (okOrError.isFailure) {
return Result.fail(okOrError.error.message);
}
// Crear el agregado de dominio
return TabContext.create(
{
username: usernameResult.data!,
email: emailResult.data!,
passwordHash: companyIdResult.data!,
roles: entity.roles || [],
token: entity.token,
},
uniqueIdResult.data!
);
}
toPersistence(tabContext: TabContext): any {
return tabContext.toPersistenceData();
}
}
export const createTabContextMapper = (): ITabContextMapper => new TabContextMapper();