Why Use This
This skill provides specialized capabilities for HoangNguyen0403's codebase.
Use Cases
- Developing new features in the HoangNguyen0403 repository
- Refactoring existing code to follow HoangNguyen0403 standards
- Understanding and working with HoangNguyen0403's codebase structure
Install Guide
2 steps - 1
- 2
Install inside Ananke
Click Install Skill, paste the link below, then press Install.
https://github.com/HoangNguyen0403/agent-skills-standard/tree/develop/skills/nestjs/documentation
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Updated At Jan 18, 2026, 04:24 AM
Skill Stats
SKILL.md 67 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
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).
```typescript
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] })`.