Marca i controller con @WithDocs()
Segnala quali controller hanno un file companion, poi esegui generate.
Il percorso più rapido: esegui nestjs-docfy init una volta, automatizza tutto quanto segue in un colpo solo. Vedi CLI: init.
Marca i tuoi controller
// users.controller.ts
import { Controller, Get, Post, Body } from "@nestjs/common";
import { WithDocs } from "nestjs-docfy";
@WithDocs()
@Controller("users")
export class UsersController {
// route handlers only: no Swagger decorators here
}Oppure lascia che generate --link-controller aggiunga automaticamente l'import e il decoratore (opzionale, modifica il file del controller). Vedi CLI: generate.
Genera i file companion
Esegui la CLI per analizzare il tuo progetto e generare un *.controller.docs.ts pre-compilato per ogni controller:
npx nestjs-docfy generateLa CLI usa solo analisi statica (nessuna esecuzione di codice) e rileva automaticamente la struttura del tuo progetto: monorepo, workspace Nx e monorepo Nest CLI sono tutti supportati.
Per un'anteprima senza toccare il filesystem:
npx nestjs-docfy generate --dry-runCompleta il file docs
Il file generato arriva già pre-compilato con riepiloghi inferiti, tipi di risposta e le risposte di errore più comuni:
// Generated by nestjs-docfy: edit freely, use --force to merge new methods
import { docs } from "nestjs-docfy";
import { ApiTags, ApiOperation, ApiResponse, ApiBody } from "@nestjs/swagger";
import { UsersController } from "./users.controller";
import { CreateUserDto } from "./dto/create-user.dto";
import { UserEntity } from "./entities/user.entity";
docs(UsersController, {
classDecorators: [ApiTags("users")],
methods: {
// GET / → async findAll(): Promise<UserEntity[]>
findAll: [
ApiOperation({ summary: "Find all" }),
ApiResponse({ status: 200, description: "OK", type: [UserEntity] }),
],
// POST / → async create(dto: CreateUserDto): Promise<UserEntity>
create: [
ApiOperation({ summary: "Create" }),
ApiBody({ type: CreateUserDto }),
ApiResponse({ status: 201, description: "Created", type: UserEntity }),
ApiResponse({ status: 400, description: "Bad Request" }),
],
},
});Modifica pure il file: le tue modifiche sono al sicuro. Rieseguire generate salta i file già esistenti. Usa --force per unire solo i metodi nuovi senza toccare quelli esistenti.