Desarrolladores
Convenciones
El patrón de 4 archivos por módulo NestJS, el formato de respuesta global y las reglas de estilo del proyecto.
Patrón de módulo (API)
Cada módulo en apps/valwisp-api/src/modules/<dominio>/ sigue el mismo patrón de 4
piezas:
| Archivo | Responsabilidad |
|---|---|
*.controller.ts | Rutas HTTP (@Controller, @ApiTags), guards/decoradores de auth |
*.service.ts | Lógica de negocio, consultas a Prisma — siempre filtradas por tenantId |
*.dto.ts | DTOs de entrada/salida (validación) |
*.module.ts | Ensamblado NestJS del módulo |
Formato de respuesta global
Todos los endpoints devuelven { success, data, timestamp } en éxito, o
{ success: false, statusCode, message, path, timestamp } en error — aplicado
globalmente, no hace falta envolver nada a mano en cada controller:
TransformInterceptor(src/common/interceptors/transform.interceptor.ts) — envuelve toda respuesta exitosa; serializaPrisma.Decimal → numberyDate → ISO stringrecursivamente.HttpExceptionFilter(src/common/filters/http-exception.filter.ts) — captura cualquier excepción; solo loguea con stack trace sistatus >= 500.
Decoradores comunes
@CurrentUser(), @TenantId(), @Public(), @Roles(...UserRole[]),
@CheckPermission(action, subject) — ver el detalle en
Autenticación.
Reglas de estilo del proyecto
- No añadas abstracciones, feature flags, ni manejo de errores para escenarios que no pueden ocurrir — confía en las garantías de Prisma/NestJS y valida solo en los bordes del sistema (input de usuario, APIs externas).
- Prefiere cambiar el código directamente a mantener shims de compatibilidad hacia atrás.
- Sin comentarios que expliquen el "qué" (el código ya lo dice) — solo el "por qué" cuando no es obvio (una restricción oculta, un workaround puntual).