S1riyS
@S1riyS

Есть ли более оптимальный подход к организации DTOs и reponses?

При создании документации к приложению (на NestJS + PrismaORM) при помощи Swagger, я столкнулся с тем, что мне часто приходиться дублировать код, например на эндпоит приходит объект вида{name: string}, а вернуть нужно объект типа{id: UUID, name: string}. В таком случае, такие параметры, как пример и тип поля nameпридется продублировать из DTO в reponse.

Чтобы этого избежать, я создаю *.entity.ts и в нем прописываю валидацию и типизацию, например:
export class AchievementEntity implements Achievement {
  @ApiProperty({ example: '4028949b-0931-4954-a522-b36afeeb84f4' })
  id: string;

  @ApiProperty({ example: 'ICPC winner' })
  @IsNotEmpty()
  @IsString()
  data: string;


А в файлах *.dto.ts и *.response.ts с помощью MappedTypes генерирую соответствующие DTO и reponse.

Так выглядит *.dto.ts:
export class CreateAchievementDTO extends PickType(AchievementEntity, ['data'] as const) {}

export class UpdateAchievementDTO extends PartialType(CreateAchievementDTO) {}


А так *.response.ts:
export class AchievementResponse extends AchievementEntity {
  constructor(achievement: Partial<AchievementEntity>) {
    super();
    Object.assign(this, achievement);
  }
}


Является ли такой подход к созданию документации оптимальным?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы