Saltar al contenido principal

Backend: arquitectura tecnica

Resumen

El backend esta construido como una API Express con modulos TypeScript y una separacion por capas relativamente clara entre configuracion, dominio, infraestructura y presentacion.

Stack confirmado

AreaTecnologia
RuntimeNode.js 22
APIExpress 5
LenguajeTypeScript ESM
Base de datosFirestore
Auth server-sideFirebase Admin
Buildtsup
LogsWinston

Estructura principal del codigo

src/
config/
data/
domain/
infrastructure/
presentation/

Significado practico

  • config/: variables de entorno y configuraciones base
  • data/: inicializacion de Firestore
  • domain/: interfaces, utilidades puras y errores del dominio
  • infrastructure/: logger, middlewares y clientes de integracion
  • presentation/: rutas, controladores, DTOs y servicios de aplicacion

Bootstrap

El arranque documentado ocurre desde src/app.ts.

Pasos generales:

  1. leer FIREBASE_CREDENTIALS_PATH
  2. inicializar Firebase Admin
  3. levantar Firestore
  4. construir el servidor Express
  5. registrar rutas y middlewares
  6. escuchar en PORT

Pipeline HTTP actual

El orden de middlewares es importante porque define seguridad y comportamiento global:

  1. cors({ origin: "*" })
  2. helmet()
  3. parseo de JSON y formularios
  4. requestLogger
  5. rateLimitMiddleware
  6. authMiddleware
  7. businessIdHeaderMiddleware
  8. rutas
  9. notFoundRoute
  10. errorHandler

Multiempresa

Cutlyy es multiempresa, por lo que muchas peticiones privadas dependen del header businessId.

Antes de dejar pasar una operacion, el middleware puede validar:

  • que el negocio exista
  • que tenga planId
  • que su suscripcion este activa
  • que el plan exista y este activo

Errores y logging

Logging

El backend registra:

  • metodo
  • URL
  • usuario solicitante
  • duracion de la request

Ademas Winston escribe en consola y en archivos de log locales.

Errores

El sistema usa CustomError para errores controlados y un errorHandler central para convertirlos a respuesta HTTP.

Capa de servicios

Aunque existen rutas por modulo, gran parte de la logica real vive en servicios de aplicacion bajo src/presentation/services.

Eso incluye dominios como:

  • bookings
  • appointments
  • memberships
  • business
  • metrics
  • reviews
  • push notifications
  • WhatsApp

Patrones a tener presentes

  • persistencia via FirestoreService
  • soft delete y timestamps
  • side effects encadenados despues de cambios de estado
  • validaciones cruzadas entre negocio, sede, empleado, servicio y plan

Limitaciones y observaciones actuales

  • no existe healthcheck dedicado
  • no existe Swagger u OpenAPI formal
  • el script test aun no representa una suite real
  • persisten nombres legacy como bigopets-backend y BUSSINESS

Documentos relacionados