Необязательный параметр в NestJS Swagger

#nestjs #nestjs-swagger

#nestjs #nestjs-swagger

Вопрос:

Для сервера API у меня есть набор моделей, например

 Recording <-> Artist 
  

с отношением ManyToMany в TypeORM. Отношение должно быть определено в моделях обеих сторон.

На определенных маршрутах я показываю только запись, а на определенных маршрутах также записи с исполнителями, используя leftJoinAndSelect . Например, /api/artists и /api/artists_with_recording .

Однако сгенерированная документация всегда показывает записи в исполнителях.

Есть ли какой-нибудь простой способ изменить вывод swagger?

Я мог бы создавать разные объекты модели с разметкой swagger, но с большим количеством объектов в большем количестве контекстов, которые могут стать довольно запутанными.

Ответ №1:

После дополнительных поисков я нашел решение. Я могу использовать функцию OmitType из NestJS для создания простых специальных классов для документации.

https://docs.nestjs.com/openapi/mapped-types#omit

Итак, для маршрута / api / исполнителей я делаю

 @Entity()
class Artist {
 ...
}

class ArtistWithoutRecording extends OmitType(Artist, ['recording'] as const)

  

В документации контроллера я включаю тип ArtistWithoutRecording .

   @Get('artists')
  @ApiOperation({
    summary: 'Get all artists',
    description: 'Some description'
  })
  @ApiOkResponse({ type: ArtistWithoutRecording })
  async getArtists() {
    return this.artistDao.findMany()
  }