Skip to content

Preparando para el desplegado - #40

Merged
Andoumeda merged 80 commits into
mainfrom
dev
Mar 17, 2026
Merged

Andoumeda merged 80 commits into
mainfrom
dev

Conversation

@CrisNAC

@CrisNAC CrisNAC commented Mar 17, 2026 •

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

Notas de lanzamiento

  • Nuevas Funcionalidades
    • Gestión de direcciones para tiendas y usuarios (crear, listar, actualizar, eliminar)
    • Sistema de reseñas de productos con calificaciones y verificación
    • Administración completa de tiendas (actualizar, eliminar, listar)
    • Actualización de perfiles de usuario y contraseñas
    • Exploración de categorías de productos y comercios
    • Recuperación detallada de productos individuales

CrisNAC and others added 30 commits March 9, 2026 08:48
OM-275: agregué el endpoint GET product by id
OM-66-feat(categories): mover product-categories a modulos globales y agregar categorías globales
leoAchu16 and others added 21 commits March 16, 2026 21:38
- Agregar deleteProductService con validación de propietario del comercio
- Agregar deleteProduct controller con respuesta 204 No Content
- Registrar ruta DELETE /products/:id protegida con autenticación
- Actualizar errorHandler para compatibilidad con objetos de error legacy
…roducto

- Validar y normalizar legacyStatus en errorHandler (rango 400-599)
- Agregar guard defensivo de autenticación en deleteProduct controller
- Reemplazar update por updateMany atómico con ownership en el WHERE para evitar race conditions
OM-262: Configuración para tests en el backend con Vitest+Supertest
OM-208(productos): agregar eliminación de producto con soft delete
@coderabbitai

coderabbitai Bot commented Mar 17, 2026 •

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c2af2113-2d28-4d31-b278-cef2be221549

📥 Commits

Reviewing files that changed from the base of the PR and between 80972e5 and 58bd0b4.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (40)
  • .github/workflows/vitest-supertest.yml
  • package.json
  • src/app.js
  • src/config/.gitkeep
  • src/middlewares/.gitkeep
  • src/middlewares/errorHandler.js
  • src/modules/commerce/addresses/controllers/addresses.controllers.js
  • src/modules/commerce/addresses/routes/addresses.routes.js
  • src/modules/commerce/addresses/services/addresses.services.js
  • src/modules/commerce/commerces/store.controller.js
  • src/modules/commerce/commerces/store.routes.js
  • src/modules/commerce/commerces/store.service.js
  • src/modules/commerce/product-reviews/product-review.controller.js
  • src/modules/commerce/product-reviews/product-review.routes.js
  • src/modules/commerce/product-reviews/product-review.service.js
  • src/modules/commerce/products/.gitkeep
  • src/modules/commerce/products/product.controller.js
  • src/modules/commerce/products/product.routes.js
  • src/modules/commerce/products/product.service.js
  • src/modules/commerce/store-categories/store-category.controller.js
  • src/modules/commerce/store-categories/store-category.routes.js
  • src/modules/commerce/store-categories/store-category.service.js
  • src/modules/session/controllers/session.controllers.js
  • src/modules/users/addresses/controllers/addresses.controllers.js
  • src/modules/users/addresses/routes/addresses.routes.js
  • src/modules/users/addresses/services/addresses.services.js
  • src/modules/users/product-review/product-review.controller.js
  • src/modules/users/product-review/product-review.routes.js
  • src/modules/users/product-review/product-review.service.js
  • src/modules/users/users/controllers/users.controllers.js
  • src/modules/users/users/routes/users.routes.js
  • src/modules/users/users/services/users.services.js
  • src/server.js
  • tests/e2e/categories.test.js
  • tests/e2e/products.test.js
  • tests/e2e/session.test.js
  • tests/e2e/stores.test.js
  • tests/e2e/tags.test.js
  • tests/e2e/users.test.js
  • vitest.config.js

📝 Walkthrough

Walkthrough

Se implementa una infraestructura completa de testing (Vitest + Supertest), se refactoriza la arquitectura de la aplicación separando la inicialización del servidor, y se añaden operaciones CRUD extensas con validación, autorización y manejo de errores para direcciones, productos, reseñas y categorías en múltiples módulos.

Changes

Cohort / File(s) Summary
Infraestructura de Testing y Configuración
.github/workflows/vitest-supertest.yml, vitest.config.js, package.json
Se añade configuración de GitHub Actions para ejecutar tests con Postgres 15, se configura Vitest con timeout de 30s y ambiente Node, y se actualizan scripts de test/inicio.
Estructura de Aplicación
src/app.js, src/server.js
Se refactoriza para exportar la app desde app.js y crearla un nuevo punto de entrada en server.js que inicia el servidor con dotenv integrado.
Gestión de Errores
src/middlewares/errorHandler.js
Se añade soporte para objetos de error plain legacy con estructura { status, message } antes del fallback 500.
Módulo de Comercios - Tiendas
src/modules/commerce/commerces/store.controller.js, src/modules/commerce/commerces/store.service.js, src/modules/commerce/commerces/store.routes.js
Se expanden operadores CRUD (updateStore, getStores, deleteStore), se añade validación exhaustiva, se integra gestión de autenticación/autorización, y se manejan logos en almacenamiento local.
Módulo de Comercios - Direcciones
src/modules/commerce/addresses/.../*
Se crean nuevos controlador, rutas y servicios para gestionar direcciones asociadas a tiendas con CRUD completo, validación de propiedad y soft-delete.
Módulo de Comercios - Categorías de Tienda
src/modules/commerce/store-categories/.../*
Se implementan controlador, rutas y servicios para recuperar y filtrar categorías de tiendas con búsqueda y límite de resultados.
Módulo de Comercios - Productos
src/modules/commerce/products/product.controller.js, src/modules/commerce/products/product.service.js, src/modules/commerce/products/product.routes.js
Se añaden operaciones updateProduct y deleteProduct con autenticación, se expande getProductById, se refactoriza validación de entrada, y se enriquece la respuesta con datos de tienda, calificación promedio y conteo de reseñas.
Módulo de Comercios - Reseñas de Productos
src/modules/commerce/product-reviews/.../*
Se crean nuevos controlador, rutas y servicios para recuperar reseñas de productos con paginación, agregación de estadísticas (promedio, totales, verificadas).
Módulo de Usuarios - Direcciones Personales
src/modules/users/addresses/.../*
Se implementan controlador, rutas y servicios completos para gestionar direcciones personales de usuarios con límites por usuario, transacciones y autorización estricta.
Módulo de Usuarios - Reseñas de Productos
src/modules/users/product-review/.../*
Se crean nuevos controlador, rutas y servicios para crear reseñas de usuarios con validación de compra verificada, detección de reseña duplicada y reactivación de eliminadas.
Módulo de Usuarios - Gestión de Perfil
src/modules/users/users/controllers/users.controllers.js, src/modules/users/users/services/users.services.js, src/modules/users/users/routes/users.routes.js
Se añaden operaciones updateUser, updateUserPassword y getUserProfile con autorización, validación de email única y seguridad de contraseñas.
Módulo de Sesión
src/modules/session/controllers/session.controllers.js
Se actualiza userSession para incluir id_store activa del usuario autenticado en la respuesta.
Tests E2E
tests/e2e/categories.test.js, tests/e2e/products.test.js, tests/e2e/session.test.js, tests/e2e/stores.test.js, tests/e2e/tags.test.js, tests/e2e/users.test.js
Se implementa suite comprehensiva de tests E2E con mocks de Prisma y JWT que valida autenticación, validación de entrada, casos de éxito/error y respuestas de API para múltiples módulos.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant Server
    participant Auth as Middleware Auth
    participant Controller
    participant Service
    participant Database
    
    Client->>Server: POST /api/users/addresses<br/>(con JWT en cookie)
    Server->>Auth: Validar token JWT
    Auth-->>Server: id_usuario válido
    Server->>Controller: createAddress(req, res)
    Controller->>Service: createAddressService(userId, requestedId, payload)
    Service->>Database: Validar usuario propietario
    Database-->>Service: Usuario verificado
    Service->>Database: Contar direcciones activas
    Database-->>Service: Conteo actual
    alt Límite alcanzado
        Service-->>Controller: Error 400
    else Límite disponible
        Service->>Database: Crear dirección + transacción
        Database-->>Service: Dirección creada
        Service-->>Controller: Datos de dirección
    end
    Controller-->>Client: 201 + dirección
Loading
sequenceDiagram
    participant Client
    participant Server
    participant Auth as Middleware Auth
    participant Controller
    participant Service
    participant Database
    
    Client->>Server: POST /products/:id/reviews<br/>(crear reseña)
    Server->>Auth: Validar autenticación
    Auth-->>Server: customerId válido
    Server->>Controller: createProductReview(req, res)
    Controller->>Service: createProductReviewService(productId, customerId, data)
    Service->>Database: Validar producto activo
    Database-->>Service: Producto verificado
    Service->>Database: Validar rol CUSTOMER
    Database-->>Service: Cliente verificado
    Service->>Database: Verificar orden DELIVERED con producto
    Database-->>Service: Compra verificada
    Service->>Database: Buscar reseña existente
    alt Reseña activa existe
        Service-->>Controller: Error 400
    else Reseña eliminada existe
        Service->>Database: Reactivar reseña
        Database-->>Service: Reseña reactivada
        Service-->>Controller: Resumen reseña
    else Nueva reseña
        Service->>Database: Crear reseña
        Database-->>Service: Reseña creada
        Service-->>Controller: Resumen reseña
    end
    Controller-->>Client: 201 + reseña
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • Andoumeda

Poem

🐰 Con saltitos de código por aquí y por allá,
Direcciones, reseñas y tiendas habrá,
Tests que validan cada operación,
Autorización correcta, ¡qué satisfacción!
Backend refactorizado, lista la canción. 🎵

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

CodeRabbit can suggest fixes for GitHub Check annotations.

Configure the reviews.tools.github-checks setting to adjust the time to wait for GitHub Checks to complete.

@Andoumeda
Andoumeda merged commit 9606f18 into main Mar 17, 2026
0 of 2 checks passed
This was referenced Mar 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants