NestJS / CrudController swagger 地成为GetManyBase

wydwbb8l  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(139)

我如何在我的CrudController中修饰一个自定义方法,以便Swagger文档显示为来自getManyBase的文档?这意味着我需要所有的过滤器字段。
我试过了

@Get('/projects')
  @UseInterceptors(CrudRequestInterceptor)
  @ApiResponse({ status: 200, type: Project, isArray: true })
  getManyProjects(@ParsedRequest() req: CrudRequest, @Request() request)
    : Promise<GetManyDefaultResponse<Project> | Project[]> {
    const { id, role } = request.user;
    if (role === UserRoles.User) {
      req.parsed.filter.push({
        field: 'userId',
        operator: 'eq',
        value: id,
      });
    }
    return this.projectService.getMany(req);
  }

但Swagger文档显示查询参数

为空
而我期待的是getManyBase .

有趣的是,如果我发送filter字符串,该方法将正常工作,但我需要Swagger来显示它们。

iyfamqjs

iyfamqjs1#

在nestjsx/积垢报告中查看该区域。
如果你在你的构造函数中加入类似这样的东西,那么它应该会完成:

import { Swagger } from '@nestjsx/crud/lib/crud';

...

constructor() {
    const metadata = Swagger.getParams(this.getManyProjects);
    const queryParamsMeta = Swagger.createQueryParamsMeta('getManyBase');
    Swagger.setParams([...metadata, ...queryParamsMeta], this.getManyProjects);
}
3yhwsihp

3yhwsihp2#

在我的版本“@nestjsx/crud”:“^5.0.0-阿尔法3”

import { Swagger } from '@nestjsx/crud/lib/crud';

...

constructor() {
    const metadata = Swagger.getParams(this.getManyProjects);
    const queryParamsMeta = Swagger.createQueryParamsMeta('getManyBase',{
      model: { type: MyModel },
      query: {
        softDelete: false,
      },
    });
    Swagger.setParams([...metadata, ...queryParamsMeta], this.getManyProjects);
}

相关问题