Comment transformer l'entité de base de données User
:
class User {
public firstName: string;
public lastName: string;
public phone?: string;
public email: string;
public status: EUserState;
public tokens: Token[];
public password: string;
}
dans l'entité DTO GetUserDTO
:
class GetUserDTO {
public id: number;
public firstName: string;
public lastName: string;
public phone?: string;
public email: string;
}
dans TypeScript? J'utilise @nestjs
, class-validator
et class-transformer
packages, mais je n'ai trouvé aucun moyen de les utiliser pour y parvenir.
Quelqu'un peut dire qu'avoir un DTO est inutile pour cela, mais nous avons des DTO partagés entre le serveur et le client pour maintenir la structure de l'API.
Des idées?
tout d'abord, changez Entity en json brut en utilisant classToPlain de class-transformer
puis, changez plain json en DTO en utilisant plainToClass de class-transformer comme ci-dessous
public async getAll(): Promise<ItemDTO[]> {
return await this.repo.find()
.then(items => items.map(e=>plainToClass(ItemDTO, classToPlain(e), { excludeExtraneousValues: true })));
}
de plus, utilisons Exclude, Expose of class-transformer dans le DTO pour les données client que vous voulez que le client voie.
@Exclude()
export class ItemDTO implements Readonly<ItemDTO> {
@ApiProperty({ required: true })
@IsUUID()
@Expose()
id: string;
}