@nestjs/swagger的ApiResponse的schema写法

43 阅读1分钟

使用ApiExtraModels和getSchemaPath。

import { Controller, Get, Query } from '@nestjs/common'
import {
  ApiExtraModels,
  ApiOkResponse,
  ApiOperation,
  ApiQuery,
  getSchemaPath,
} from '@nestjs/swagger'
import { AisNaviEntity } from './entities/ais-tcp.entity'
import { AistcpService } from './ais-tcp.service'
import { AisNaviVo } from './vo/AisNavi.vo'
@ApiExtraModels(AisNaviEntity)
@ApiExtraModels(AisNaviVo)
@Controller('ais-tcp-http')
export class AisTcpController {
  constructor(private readonly aisTcpService: AistcpService) {}

  @Get('getShipsTrack')
  @ApiOperation({ summary: '获取船舶轨迹' })
  @ApiOkResponse({
    schema: {
      type: 'array',
      items: {
        type: 'array',
        items: { $ref: getSchemaPath(AisNaviEntity) },
      },
    },
  })
  @ApiQuery({ name: 'startTime', type: String, required: true, description: '开始时间' })
  @ApiQuery({ name: 'endTime', type: String, required: false, description: '结束时间' })
  @ApiQuery({ name: 'mmsi', type: String, required: false, description: '船舶MMSI' })
  async getShipsTrack(
    @Query('startTime') startTime: string,
    @Query('endTime') endTime: string,
    @Query('mmsi') mmsi?: string
  ) {
    return this.aisTcpService.getShipsTrack({
      startTime: new Date(startTime),
      endTime: endTime ? new Date(endTime) : undefined,
      mmsi: mmsi ? Number(mmsi) : undefined,
    })
  }
}