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
| Area | Tecnologia |
|---|---|
| Runtime | Node.js 22 |
| API | Express 5 |
| Lenguaje | TypeScript ESM |
| Base de datos | Firestore |
| Auth server-side | Firebase Admin |
| Build | tsup |
| Logs | Winston |
Estructura principal del codigo
src/
config/
data/
domain/
infrastructure/
presentation/
Significado practico
config/: variables de entorno y configuraciones basedata/: inicializacion de Firestoredomain/: interfaces, utilidades puras y errores del dominioinfrastructure/: logger, middlewares y clientes de integracionpresentation/: rutas, controladores, DTOs y servicios de aplicacion
Bootstrap
El arranque documentado ocurre desde src/app.ts.
Pasos generales:
- leer
FIREBASE_CREDENTIALS_PATH - inicializar Firebase Admin
- levantar Firestore
- construir el servidor Express
- registrar rutas y middlewares
- escuchar en
PORT
Pipeline HTTP actual
El orden de middlewares es importante porque define seguridad y comportamiento global:
cors({ origin: "*" })helmet()- parseo de JSON y formularios
requestLoggerrateLimitMiddlewareauthMiddlewarebusinessIdHeaderMiddleware- rutas
notFoundRouteerrorHandler
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
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
testaun no representa una suite real - persisten nombres legacy como
bigopets-backendyBUSSINESS