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

53 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-05-02 21:43:51 +00:00
import { EmailAddress, UniqueID } from "@/core/common/domain";
2025-02-21 10:06:27 +00:00
import {
2025-05-04 20:06:57 +00:00
type ISequelizeMapper,
type MapperParamsType,
2025-02-21 10:06:27 +00:00
SequelizeMapper,
2025-05-02 21:43:51 +00:00
} from "@/core/common/infrastructure/sequelize/sequelize-mapper";
2025-05-09 10:45:32 +00:00
import { Result } from "@repo/rdx-utils";
2025-05-02 21:43:51 +00:00
import { User, Username } from "../../domain";
2025-02-21 10:06:27 +00:00
import { UserCreationAttributes, UserModel } from "../sequelize";
2025-02-15 21:30:12 +00:00
2025-02-21 10:06:27 +00:00
export interface IUserMapper extends ISequelizeMapper<UserModel, UserCreationAttributes, User> {}
2025-02-15 21:30:12 +00:00
2025-02-21 10:06:27 +00:00
class UserMapper
extends SequelizeMapper<UserModel, UserCreationAttributes, User>
implements IUserMapper
{
public mapToDomain(source: UserModel, params?: MapperParamsType): Result<User, Error> {
2025-02-15 21:30:12 +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 emailResult = EmailAddress.create(source.email);
2025-02-15 21:30:12 +00:00
// 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!
);
}
2025-05-04 20:06:57 +00:00
public mapToPersistence(source: User, params?: MapperParamsType): UserCreationAttributes {
return {
2025-02-21 10:06:27 +00:00
id: source.id.toString(),
username: source.username.toString(),
email: source.email.toString(),
//roles: source.getRoles().map((role) => role.toString()),
2025-05-04 20:06:57 +00:00
};
2025-02-15 21:30:12 +00:00
}
}
const userMapper: IUserMapper = new UserMapper();
export { userMapper };