From 4f6ec41b3215ccab36f63fc907f5a43491d94fc8 Mon Sep 17 00:00:00 2001 From: hack_25030344_757942 <25030344@itcelaya.edu.mx> Date: Sat, 23 May 2026 01:50:14 +0000 Subject: [PATCH] Delete backend/CHANGES_SUMMARY.md --- backend/CHANGES_SUMMARY.md | 202 ------------------------------------- 1 file changed, 202 deletions(-) delete mode 100644 backend/CHANGES_SUMMARY.md diff --git a/backend/CHANGES_SUMMARY.md b/backend/CHANGES_SUMMARY.md deleted file mode 100644 index c588441..0000000 --- a/backend/CHANGES_SUMMARY.md +++ /dev/null @@ -1,202 +0,0 @@ -# Resumen de Archivos - Clean Architecture - -## Archivos Modificados/Creados - -### 1. **config/env.ts** ✓ -- Lee y valida variables de entorno -- Centraliza PORT, DATABASE_URL, JWT_SEED, BCRYPT_ROUNDS -- Se importa en toda la app para acceder a configuración - -### 2. **config/jwt.ts** ✓ -- JwtAdapter para generar y validar tokens -- Métodos estáticos: `generate()` y `validate()` -- Define JwtPayload interface con id y email -- Exporta los tokens y valida automáticamente expiración - -### 3. **config/bcrypt.ts** ✓ -- BcryptAdapter para hashear y comparar contraseñas -- Métodos estáticos: `hash()` y `compare()` -- Usa BCRYPT_ROUNDS de env para consistencia - -### 4. **domain/errors/custom.error.ts** ✓ -- CustomError clase base para errores personalizados -- Métodos estáticos: badRequest(), unauthorized(), notFound(), conflict(), internalServer() -- Cada error tiene statusCode para responder correctamente - -### 5. **domain/dtos/auth/register-user.dto.ts** ✓ -- RegisterUserDto interfaz -- RegisterUserDtoValidator con método validate() -- Valida name (no vacío), email (formato), password (mínimo 6 caracteres) -- Normaliza email a minúsculas - -### 6. **domain/dtos/auth/login-user.dto.ts** ✓ -- LoginUserDto interfaz -- LoginUserDtoValidator con método validate() -- Valida email (formato) y password (no vacío) -- Normaliza email a minúsculas - -### 7. **domain/dtos/index.ts** ✓ -- Exporta todos los DTOs en un solo lugar -- Facilita importar: `import * from '../../dtos'` - -### 8. **domain/repositories/auth.repository.ts** ✓ -- AuthRepository interfaz (contrato) -- Define métodos: findByEmail(), create(), findById() -- El UseCase no sabe cómo se implementa, solo el contrato - -### 9. **domain/use-cases/auth/register-user.use-case.ts** ✓ -- RegisterUserUseCase ejecuta el registro -- Valida DTO → Verifica email → Hashea → Crea usuario → Genera JWT -- Retorna { user, token } -- Lanza CustomError si email existe - -### 10. **domain/use-cases/auth/login-user.use-case.ts** ✓ -- LoginUserUseCase ejecuta el login -- Valida DTO → Busca usuario → Compara password → Genera JWT -- Retorna { user, token } -- Lanza CustomError si credenciales son inválidas - -### 11. **domain/use-cases/auth/get-me.use-case.ts** ✓ -- GetMeUseCase obtiene el usuario autenticado -- Recibe userId del JWT -- Busca en repositorio y retorna datos del usuario -- Lanza CustomError si no existe - -### 12. **data/postgres/index.ts** ✓ -- Cliente único de Prisma -- Se inicializa una vez y se reutiliza -- Se exporta para usarlo en repositorios - -### 13. **data/repositories/auth.repository.impl.ts** ✓ -- AuthRepositoryImpl implementa AuthRepository -- Habla directamente con Prisma (BD) -- Métodos: findByEmail(), create(), findById() -- Select solo los campos necesarios (no contraseña en getMe) - -### 14. **presentation/middlewares/auth.middleware.ts** ✓ -- AuthMiddleware valida JWT en rutas protegidas -- Extrae token del header: "Authorization: Bearer TOKEN" -- Valida token → Busca usuario en BD → Agrega a req.user -- Define AuthRequest extends Request con user opcional -- Retorna 401 si token inválido o usuario no existe - -### 15. **presentation/auth/controller.ts** ✓ -- AuthController maneja peticiones HTTP -- Métodos: register(), login(), getMe() -- Cada método recibe, llama al UseCase, responde -- handleError() maneja CustomError y error normal - -### 16. **presentation/auth/routes.ts** ✓ -- Define rutas de autenticación -- POST /api/auth/register → controller.register -- POST /api/auth/login → controller.login -- GET /api/auth/me → AuthMiddleware.validate → controller.getMe - -### 17. **presentation/routes.ts** ✓ -- Rutas principales de la app -- Integra AuthRoutes en /api/auth - -### 18. **presentation/server.ts** (Sin cambios) -- Instancia Express -- Middlewares globales (json, urlencoded) - -### 19. **app.ts** ✓ -- Punto de entrada -- Conecta a Prisma -- Crea Server con env.PORT -- Maneja errores globales - -### 20. **.env.example** ✓ -- Ejemplo de variables de entorno -- El usuario debe copiar a .env y configurar valores - -### 21. **ARCHITECTURE.md** ✓ -- Documentación completa de la arquitectura -- Estructura de carpetas -- Flujo de datos -- Endpoints -- Variables de entorno - ---- - -## Resumen de Cambios - -### Lógica de Negocio (Domain) -- DTOs con validaciones robustas -- UseCase implementan la lógica de registrar, login, obtener usuario -- Repository interface define el contrato -- CustomError para manejo de errores consistente - -### Implementación (Data) -- AuthRepositoryImpl usa Prisma para hablar con BD -- Select solo campos necesarios (seguridad) -- Reutiliza cliente de Prisma - -### HTTP (Presentation) -- AuthController coordina peticiones HTTP -- AuthMiddleware valida JWT en rutas protegidas -- AuthRoutes define endpoints - -### Configuración (Config) -- JwtAdapter y BcryptAdapter centralizados -- env.ts maneja todas las variables - ---- - -## Cómo Usar - -### 1. Copiar .env.example a .env -```bash -cp .env.example .env -``` - -### 2. Configurar variables de entorno -```bash -# .env -DATABASE_URL=postgresql://user:password@localhost:5432/optihack -JWT_SEED=mi_secreto_super_seguro -``` - -### 3. Instalar dependencias -```bash -npm install -``` - -### 4. Ejecutar migraciones de Prisma -```bash -npx prisma migrate dev -``` - -### 5. Iniciar el servidor -```bash -npm run dev -``` - -### 6. Probar endpoints -```bash -# Register -curl -X POST http://localhost:3000/api/auth/register \ - -H "Content-Type: application/json" \ - -d '{"name":"John","email":"john@example.com","password":"password123"}' - -# Login -curl -X POST http://localhost:3000/api/auth/login \ - -H "Content-Type: application/json" \ - -d '{"email":"john@example.com","password":"password123"}' - -# GetMe (usa el token obtenido en login) -curl -X GET http://localhost:3000/api/auth/me \ - -H "Authorization: Bearer " -``` - ---- - -## Principios Aplicados - -✓ **Separation of Concerns**: Cada capa tiene una responsabilidad -✓ **Dependency Inversion**: UseCase depende de interfaz, no implementación -✓ **Single Responsibility**: Cada archivo hace una cosa bien -✓ **Open/Closed**: Fácil agregar nuevos casos de uso -✓ **Liskov Substitution**: AuthRepositoryImpl puede reemplazar AuthRepository -✓ **Interface Segregation**: Interfaces pequeñas y específicas -✓ **DRY**: No repitas código, centraliza lógica