nestjs-patterns
Ajuda seu agente a construir backends robustos em TypeScript usando NestJS. Ele entende padrões de módulos, controladores e provedores para criar aplicações eficientes.
O que ela faz
Este guia ensina como organizar e construir aplicações web usando a tecnologia NestJS. Ele mostra como dividir o código em partes (módulos, controladores, serviços) e como garantir que os dados recebidos estejam corretos e seguros.
Quando usar
- ✓Ao começar um novo projeto web com NestJS.
- ✓Ao organizar o código de um projeto NestJS existente.
- ✓Ao adicionar validação de dados ou regras de segurança em uma API.
Exemplo do que pedir para a IA
“Como posso organizar meu código NestJS para que ele seja fácil de manter?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele sugere uma estrutura de pastas e exemplos de código para separar as responsabilidades. Mostra como validar os dados que chegam e como lidar com erros de forma consistente.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill nestjs-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/nestjs-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Desenvolvimento NestJS
Padrões NestJS de nível de produção para backends TypeScript modulares.
Quando Ativar
- Construindo APIs ou serviços NestJS
- Estruturando módulos, controllers e providers
- Adicionando validação de DTO, guards, interceptors ou exception filters
- Configurando configurações cientes do ambiente e integrações de banco de dados
- Testando unidades NestJS ou endpoints HTTP
Estrutura do Projeto
src/
├── app.module.ts
├── main.ts
├── common/
│ ├── filters/
│ ├── guards/
│ ├── interceptors/
│ └── pipes/
├── config/
│ ├── configuration.ts
│ └── validation.ts
├── modules/
│ ├── auth/
│ │ ├── auth.controller.ts
│ │ ├── auth.module.ts
│ │ ├── auth.service.ts
│ │ ├── dto/
│ │ ├── guards/
│ │ └── strategies/
│ └── users/
│ ├── dto/
│ ├── entities/
│ ├── users.controller.ts
│ ├── users.module.ts
│ └── users.service.ts
└── prisma/ or database/
- Mantenha o código de domínio dentro de módulos de funcionalidade.
- Coloque filtros, decoradores, guards e interceptors transversais em
common/. - Mantenha os DTOs próximos ao módulo que os possui.
Bootstrap e Validação Global
async function bootstrap() {
const app = await NestFactory.create(AppModule, { bufferLogs: true });
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
transformOptions: { enableImplicitConversion: true },
}),
);
app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector)));
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
- Sempre ative
whitelisteforbidNonWhitelistedem APIs públicas. - Prefira um pipe de validação global em vez de repetir a configuração de validação por rota.
Módulos, Controllers e Providers
@Module({
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get(':id')
getById(@Param('id', ParseUUIDPipe) id: string) {
return this.usersService.getById(id);
}
@Post()
create(@Body() dto: CreateUserDto) {
return this.usersService.create(dto);
}
}
@Injectable()
export class UsersService {
constructor(private readonly usersRepo: UsersRepository) {}
async create(dto: CreateUserDto) {
return this.usersRepo.create(dto);
}
}
- Controllers devem permanecer enxutos: parsear entrada HTTP, chamar um provider, retornar DTOs de resposta.
- Coloque a lógica de negócios em serviços injetáveis, não em controllers.
- Exporte apenas os providers que outros módulos realmente precisam.
DTOs e Validação
export class CreateUserDto {
@IsEmail()
email!: string;
@IsString()
@Length(2, 80)
name!: string;
@IsOptional()
@IsEnum(UserRole)
role?: UserRole;
}
- Valide cada DTO de requisição com
class-validator. - Use DTOs de resposta dedicados ou serializadores em vez de retornar entidades ORM diretamente.
- Evite vazar campos internos como hashes de senha, tokens ou colunas de auditoria.
Autenticação, Guards e Contexto da Requisição
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles('admin')
@Get('admin/report')
getAdminReport(@Req() req: AuthenticatedRequest) {
return this.reportService.getForUser(req.user.id);
}
- Mantenha estratégias de autenticação e guards locais ao módulo, a menos que sejam verdadeiramente compartilhados.
- Codifique regras de acesso amplas em guards, depois faça a autorização específica de recursos em serviços.
- Prefira tipos de requisição explícitos para objetos de requisição autenticados.
Exception Filters e Formato de Erro
@Catch()
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
const response = host.switchToHttp().getResponse<Response>();
const request = host.switchToHttp().getRequest<Request>();
if (exception instanceof HttpException) {
return response.status(exception.getStatus()).json({
path: request.url,
error: exception.getResponse(),
});
}
return response.status(500).json({
path: request.url,
error: 'Internal server error',
});
}
}
- Mantenha um envelope de erro consistente em toda a API.
- Lance exceções do framework para erros esperados do cliente; registre e envolva falhas inesperadas centralmente.
Configuração e Validação de Ambiente
ConfigModule.forRoot({
isGlobal: true,
load: [configuration],
…
Perguntas frequentes
O que são módulos, controladores e provedores?
Módulos organizam o código, controladores recebem as requisições e provedores (serviços) contêm a lógica de negócio.
Por que é importante validar os dados recebidos?
Para garantir que a aplicação receba apenas informações esperadas e seguras, evitando erros e falhas de segurança.
Como lidar com erros na aplicação?
O guia sugere usar filtros de exceção para padronizar a forma como os erros são reportados, tanto para o usuário quanto para o desenvolvedor.
Detalhes
Descrição original do autor
NestJS architecture patterns for modules, controllers, providers, DTO validation, guards, interceptors, config, and production-grade TypeScript backends. Use when building or reviewing a NestJS backend — modules, providers, DTO validation, guards, or interceptors.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #91
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
api-and-interface-design
Ajuda a criar APIs e interfaces bem definidas. É útil ao projetar como diferentes partes de um software vão se comunicar.
addyosmani/agent-skills
mason
Ajuda seu agente a escrever código limpo e funcional. Ele segue as regras definidas para garantir que tudo funcione como esperado.
sickn33/agentic-awesome-skills
max
Faz seu agente melhorar o código existente sem mudar o que ele faz. Ele deixa o código mais fácil de ler e manter.
sickn33/agentic-awesome-skills