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

48 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-02-04 14:58:33 +00:00
import { Result, UniqueID } from "@common/domain";
2025-02-04 18:25:10 +00:00
import { TabContext } from "@contexts/auth/domain";
2025-02-04 14:58:33 +00:00
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);
2025-02-04 18:25:10 +00:00
const tabIdResult = UniqueID.create(entity.tab_id);
const userIdResult = UniqueID.create(entity.user_id);
const companyIdResult = UniqueID.create(entity.company_id, false);
const brachIdResult = UniqueID.create(entity.branch_id, false);
2025-02-04 14:58:33 +00:00
// Validar que no haya errores en la creación de los Value Objects
const okOrError = Result.combine([
uniqueIdResult,
2025-02-04 18:25:10 +00:00
tabIdResult,
userIdResult,
2025-02-04 14:58:33 +00:00
companyIdResult,
2025-02-04 18:25:10 +00:00
brachIdResult,
2025-02-04 14:58:33 +00:00
]);
if (okOrError.isFailure) {
return Result.fail(okOrError.error.message);
}
// Crear el agregado de dominio
return TabContext.create(
{
2025-02-04 18:25:10 +00:00
tabId: tabIdResult.data!,
userId: userIdResult.data!,
companyId: companyIdResult.data,
branchId: brachIdResult.data,
2025-02-04 14:58:33 +00:00
},
uniqueIdResult.data!
);
}
toPersistence(tabContext: TabContext): any {
return tabContext.toPersistenceData();
}
}
export const createTabContextMapper = (): ITabContextMapper => new TabContextMapper();