agent-rules-kit
Version:
Bootstrap of **Cursor** rules (`.mdc`) and mirror documentation (`.md`) for AI agent-guided projects.
237 lines (206 loc) • 8.77 kB
Markdown
# Estructura de Proyecto NestJS
Este documento define las estructuras de proyecto recomendadas para aplicaciones NestJS.
## Estructura Base
La estructura estándar recomendada para aplicaciones NestJS:
```
proyecto/
├── dist/ # Código compilado
├── node_modules/ # Dependencias
├── src/ # Código fuente
│ ├── app.module.ts # Módulo principal
│ ├── app.controller.ts # Controlador principal
│ ├── app.service.ts # Servicio principal
│ ├── main.ts # Punto de entrada
│ ├── common/ # Código compartido
│ │ ├── constants/ # Constantes globales
│ │ ├── decorators/ # Decoradores personalizados
│ │ ├── dto/ # DTOs compartidos
│ │ ├── entities/ # Entidades compartidas
│ │ ├── enums/ # Enums globales
│ │ ├── exceptions/ # Excepciones personalizadas
│ │ ├── filters/ # Filtros globales
│ │ ├── guards/ # Guards globales
│ │ ├── interceptors/ # Interceptores globales
│ │ ├── interfaces/ # Interfaces compartidas
│ │ ├── middleware/ # Middleware personalizado
│ │ ├── pipes/ # Pipes globales
│ │ └── utils/ # Utilidades compartidas
│ ├── config/ # Configuración de la aplicación
│ │ ├── config.module.ts
│ │ ├── config.service.ts
│ │ └── configuration.ts
│ └── modules/ # Módulos de la aplicación
│ ├── users/ # Módulo de usuarios
│ │ ├── dto/ # DTOs específicos del módulo
│ │ ├── entities/ # Entidades específicas del módulo
│ │ ├── users.controller.ts
│ │ ├── users.module.ts
│ │ ├── users.service.ts
│ │ └── users.service.spec.ts
│ └── auth/ # Módulo de autenticación
│ ├── dto/
│ ├── guards/
│ ├── strategies/
│ ├── auth.controller.ts
│ ├── auth.module.ts
│ ├── auth.service.ts
│ └── auth.service.spec.ts
├── test/ # Tests e2e
│ ├── app.e2e-spec.ts
│ └── jest-e2e.json
├── .env # Variables de entorno
├── .eslintrc.js # Configuración ESLint
├── .gitignore # Configuración Git
├── .prettierrc # Configuración Prettier
├── nest-cli.json # Configuración NestJS CLI
├── package.json # Dependencias y scripts
├── tsconfig.json # Configuración TypeScript
├── tsconfig.build.json # Config TS para build
└── README.md # Documentación
```
## Estructura por Dominio (DDD)
Para proyectos que utilizan Domain-Driven Design:
```
src/
├── domain/ # Lógica de dominio
│ ├── users/ # Dominio de usuarios
│ │ ├── entities/ # Entidades de dominio
│ │ ├── value-objects/ # Value Objects
│ │ ├── interfaces/ # Interfaces del dominio
│ │ └── events/ # Eventos del dominio
│ └── products/ # Otro dominio
│ ├── entities/
│ └── ...
├── application/ # Casos de uso
│ ├── users/ # Casos de uso de usuarios
│ │ ├── commands/ # Comandos (CQRS)
│ │ ├── queries/ # Consultas (CQRS)
│ │ ├── dtos/ # DTOs
│ │ └── interfaces/ # Interfaces de aplicación
│ └── products/ # Casos de uso de productos
│ └── ...
├── infrastructure/ # Implementaciones concretas
│ ├── database/ # Configuración y adapters de BD
│ │ ├── typeorm/ # Implementación TypeORM
│ │ │ ├── entities/ # Entidades TypeORM
│ │ │ ├── migrations/ # Migraciones
│ │ │ └── repositories/ # Repositorios TypeORM
│ ├── auth/ # Implementación de autenticación
│ ├── config/ # Configuración de infraestructura
│ └── logging/ # Implementación de logging
└── interface/ # Interfaces de usuario
├── api/ # API REST/GraphQL
│ ├── controllers/ # Controladores
│ ├── dtos/ # DTOs específicos de API
│ ├── middlewares/ # Middlewares
│ └── presenters/ # Transformadores de respuesta
├── events/ # Controladores de eventos
└── jobs/ # Jobs programados
```
## Estructura Modular Escalable
Para aplicaciones grandes con múltiples módulos relacionados:
```
src/
├── core/ # Módulos centrales
│ ├── database/ # Configuración BD
│ ├── auth/ # Autenticación
│ ├── logging/ # Logging
│ └── config/ # Configuración
├── shared/ # Código compartido
│ ├── constants/ # Constantes
│ ├── dto/ # DTOs compartidos
│ ├── exceptions/ # Excepciones
│ └── utils/ # Utilidades
├── modules/ # Módulos de negocio
│ ├── users/ # Módulo de usuarios
│ │ ├── domain/ # Entidades y lógica
│ │ ├── application/ # Servicios y lógica
│ │ └── infrastructure/ # Implementaciones
│ ├── products/
│ └── orders/
└── main.ts # Punto de entrada
```
## Principios de Organización
1. **Alta Cohesión**: Los archivos relacionados deben estar juntos.
2. **Bajo Acoplamiento**: Minimizar dependencias entre módulos.
3. **Encapsulación**: Exponer solo lo necesario desde cada módulo.
4. **Modularidad**: Estructurar por funcionalidad, no por tipo de archivo.
## Estructuración de Módulos
Cada módulo debe seguir una estructura coherente:
```
modulo/
├── dto/ # DTOs
│ ├── create-*.dto.ts
│ └── update-*.dto.ts
├── entities/ # Entidades
│ └── *.entity.ts
├── interfaces/ # Interfaces
│ └── *.interface.ts
├── modulo.controller.ts # Controlador del módulo
├── modulo.module.ts # Definición del módulo
├── modulo.service.ts # Servicio del módulo
└── modulo.service.spec.ts # Tests del servicio
```
## Estrategias para Proyectos Grandes
### Monorepo con NestJS
Estructura para monorepo usando Nx o Lerna:
```
apps/
├── api/ # API principal
│ └── src/
├── admin/ # Panel de administración
│ └── src/
└── worker/ # Trabajador de procesos
└── src/
libs/
├── common/ # Código compartido
│ └── src/
├── feature-a/ # Librería para característica A
│ └── src/
└── feature-b/ # Librería para característica B
└── src/
```
### Microservicios
Estructura para arquitectura de microservicios:
```
services/
├── users-service/ # Servicio de usuarios
│ ├── src/
│ └── ...
├── auth-service/ # Servicio de autenticación
│ ├── src/
│ └── ...
├── products-service/ # Servicio de productos
│ ├── src/
│ └── ...
└── api-gateway/ # Gateway de API
├── src/
└── ...
```
## Buenas Prácticas de Organización
1. **Rutas Absolutas**: Configurar TypeScript para usar rutas absolutas desde la raíz:
```typescript
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@app/*": ["src/*"],
"@modules/*": ["src/modules/*"],
"@common/*": ["src/common/*"]
}
}
}
```
2. **Índices de Barril**: Usar archivos index.ts para exportaciones:
```typescript
// src/common/index.ts
export * from './constants';
export * from './utils';
export * from './dto';
```
3. **Separación de Responsabilidades**:
- Controladores: Manejan requests HTTP
- Servicios: Contienen lógica de negocio
- Repositorios: Acceso a datos
> Nota: Independientemente de la estructura elegida, mantén la coherencia en todo el proyecto.