Back to list
HoangNguyen0403

nestjs-openapi

by HoangNguyen0403

A collection of Agent Skills Standard and Best Practice for Programming Languages, Frameworks that help our AI Agent follow best practies on frameworks and programming laguages

111🍴 40📅 Jan 23, 2026

SKILL.md


name: NestJS OpenAPI description: Swagger automation and Generic response documentation. metadata: labels: [nestjs, swagger, openapi, docs] triggers: files: ['main.ts', '**/*.dto.ts'] keywords: [DocumentBuilder, SwaggerModule, ApiProperty, ApiResponse]

OpenAPI & Documentation

Priority: P2 (MAINTENANCE)

Automated API documentation and OpenAPI standards.

  • Automation: ALWAYS use the Nest CLI Plugin (@nestjs/swagger/plugin).
    • Benefit: Auto-generates @ApiProperty for DTOs and response types. Reduces boilerplate by 50%.
    • Config: nest-cli.json -> "plugins": ["@nestjs/swagger"].
  • Versioning: Maintain separate Swagger docs for v1, v2 if breaking changes occur.

Response Documentation

  • Strictness: Every controller method must have @ApiResponse({ status: 200, type: UserDto }).
  • Generic Wrappers: Define ApiPaginatedResponse<T> decorators to document generic PageDto<T> returns properly (Swagger doesn't handle generics well by default).
    • Technique: Use ApiExtraModels + getSchemaPath() in the custom decorator to handle the generic T ref.

Advanced Patterns

  • Polymorphism: Use @ApiExtraModels and getSchemaPath for oneOf/anyOf union types.
  • File Uploads: Document multipart/form-data explicitly.
    • Decorator: @ApiConsumes('multipart/form-data').
    • Body: @ApiBody({ schema: { type: 'object', properties: { file: { type: 'string', format: 'binary' } } } }).
  • Authentication: Specify granular security schemes per route/controller.
    • Types: @ApiBearerAuth() or @ApiSecurity('api-key') (Must match DocumentBuilder().addBearerAuth()).
  • Enums: Force named enums for reusable schema references.
    • Code: @ApiProperty({ enum: MyEnum, enumName: 'MyEnum' }).

Operation Grouping

  • Tags: Mandatory @ApiTags('domains') on every Controller to group endpoints logically.

  • Multiple Docs: generate separate docs for different audiences (e.g. Public vs Internal).

    SwaggerModule.createDocument(app, config, { include: [PublicModule] }); // /api/docs
    SwaggerModule.createDocument(app, adminConfig, { include: [AdminModule] }); // /admin/docs
    

Self-Documentation

  • Compodoc: Use @compodoc/compodoc to generate static documentation of the module graph, services, and dependencies.
    • Use Case: New developer onboarding and architectural review.

Advanced OpenAPI

  • Polymorphism: Use @ApiExtraModels and getSchemaPath for oneOf/anyOf union types.
    • Pattern: Register generic/sub-types in controller, refer via schema $ref.
  • File Uploads: Document multipart/form-data explicitly.
    • Decorator: @ApiConsumes('multipart/form-data').
    • Body: @ApiBody({ schema: { type: 'object', properties: { file: { type: 'string', format: 'binary' } } } }).
  • Authentication: Specify granular security schemes per route/controller.
    • Types: @ApiBearerAuth() or @ApiSecurity('api-key'). Match setup in DocumentBuilder.
  • Enums: Force named enums for reusable schema references.
    • Code: @ApiProperty({ enum: MyEnum, enumName: 'MyEnum' }).
  • Grouping: Segregate public vs. internal docs.
    • Setup: SwaggerModule.createDocument(app, config, { include: [AdminModule] }).

Score

Total Score

85/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

+5
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon