Tengo una capa de datos que lee y escribe en una instancia de MongoDB. Solo quiero tratar con documentos de MongoDB en esa capa y no exponer esa implementación a mis servicios.
Ahora mismo estoy haciendo algo como:
// users.repository.ts ... async getUserById(id: string): Promise<UserDto> { const user = await this.model.findOne({ _id: id }).exec(); return this.transformToDto(user); } private transformToDto(user: UserDocument): UserDto { return { id: user._id, ...etc } } ...Esto parece demasiado detallado y debe haber una forma más sencilla de lograrlo sin agregar un ayudante a cada repositorio.
¿Hay una manera más limpia de lograr esto?
Puede usar class-transformer para eso y no necesita usar métodos auxiliares adicionales, puede devolverse instantáneamente.
import { plainToClass } from 'class-transformer'; class UserDto { id: string; email: string; role: string; } class Service { async getUserById(id: string): Promise<UserDto> { const user = await this.model.findOne({ _id: id }).exec(); return plainToClass(UserDto, user); } } Devolverá el valor transformado que es UserDto
UserDto { id: 'U-111', email: 'U-111@email', role: 'user' }