Просто интересно, как лучше всего преобразовать объект сущности NestJS в DTO.
Допустим, у меня есть следующее:
import { IsString, IsNumber, IsBoolean } from 'class-validator';
import { Exclude } from 'class-transformer';
export class PhotoSnippetDto {
@IsNumber()
readonly id: number;
@IsString()
readonly name: string;
constructor(props) {
Object.assign(this, props);
}
}
export class Photo {
@IsNumber()
id: number;
@IsString()
name: string;
@IsString()
description: string;
@IsString()
filename: string;
@IsNumber()
views: number;
@IsBoolean()
isPublished: boolean;
@Exclude()
@IsString()
excludedPropery: string;
constructor(props) {
Object.assign(this, props);
}
}
@Controller()
export class AppController {
@Get()
@UseInterceptors(ClassSerializerInterceptor)
root(): PhotoSnippetDto {
const photo = new Photo({
id: 1,
name: 'Photo 1',
description: 'Photo 1 description',
filename: 'photo.png',
views: 10,
isPublished: true,
excludedPropery: 'Im excluded'
});
return new PhotoSnippetDto(photo);
}
}
Я ожидал, что ClassSerializerInterceptor сериализует объект фотографиив DTO и вернуть что-то вроде этого:
{
id: 1,
name: 'Photo 1'
}
Но я получаю ответ, содержащий все свойства по-прежнему:
{
id = 1,
name = 'Photo 1',
description = 'Photo 1 description',
filename = 'file.png',
views = 10,
isPublished = true
}
Я в основном хочу удалить все свойства, которые являютсяне определено в DTO.
Я знаю, что ClassSerializerInterceptor отлично работает при использовании @Exclude (), я просто ожидал, что он также удалит неопределенные свойства.
Мне любопытно, чтолучший способ пойти об этом?Я знаю, что могу сделать что-то вроде:
@Get('test')
@UseInterceptors(ClassSerializerInterceptor)
test(): PhotoSnippetDto {
const photo = new Photo({
id: 1,
name: 'Photo 1',
description: 'Photo 1 description',
filename: 'photo.png',
views: 10,
isPublished: true,
excludedPropery: 'Im excluded'
});
const { id, name } = photo;
return new PhotoSnippetDto({id, name});
}
Но если я когда-нибудь захочу добавить другое свойство к ответу, мне придется сделать больше, чем просто добавить новое свойство в класс.интересно, есть ли лучший способ «гнезда» для этого.