2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
## 1) Infraestructura (Docker)
|
|
|
|
|
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- El proyecto depende de Dolibarr y una base de datos real.
|
2026-05-14 10:03:15 +00:00
|
|
|
- Docker permite reproducir el entorno en cualquier máquina.
|
|
|
|
|
- Sin Dolibarr activo, la API devuelve errores de conexión.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 08:36:17 +00:00
|
|
|
**Docker Desktop**
|
|
|
|
|

|
|
|
|
|
***
|
|
|
|
|
**Docker compose**
|
|
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 08:36:17 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Se levantan 2 servicios: MariaDB y Dolibarr.
|
|
|
|
|
- Dolibarr expone el puerto `8200` para acceder al ERP.
|
2026-05-14 10:03:15 +00:00
|
|
|
- Las credenciales y módulos se configuran por variables de entorno.
|
|
|
|
|
- Los volúmenes guardan datos persistentes.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
## 2) Variables de entorno (configuración)
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- La app no funciona sin apuntar a la API de Dolibarr.
|
|
|
|
|
- La API key se mantiene en servidor y no se expone al cliente.
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Env local (API borrada por temas de seguridad...)**
|
2026-05-14 08:36:17 +00:00
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 08:36:17 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- La URL y la API key son el puente con Dolibarr.
|
|
|
|
|
- Existen variables legacy `NEXT_PUBLIC_*` por compatibilidad.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 3) Proxy API (seguridad de la API key)
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- El frontend nunca habla directamente con Dolibarr.
|
|
|
|
|
- El proxy agrega la key en servidor y protege credenciales.
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Métodos GET/POST/PUT/DELETE:**
|
2026-05-14 08:36:17 +00:00
|
|
|

|
|
|
|
|
***
|
|
|
|
|
**Ejemplo llamada:**
|
|
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 08:36:17 +00:00
|
|
|
|
|
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Todas las llamadas pasan por `/api/dolibarr/...`.
|
|
|
|
|
- Se construye la URL real con `DOLIBARR_API_URL`.
|
2026-05-14 10:03:15 +00:00
|
|
|
- Se reenvían los métodos HTTP y se manejan errores.
|
|
|
|
|
- La API key nunca se expone al navegador; se inyecta en servidor.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 4) Cliente central de Dolibarr
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Centraliza todas las llamadas a la API.
|
2026-05-14 08:36:17 +00:00
|
|
|
- Simplifica los métodos de los servicios (proyectos, tareas, usuarios).
|
|
|
|
|
|
|
|
|
|
**Direct Fetch:**
|
|
|
|
|

|
|
|
|
|
***
|
|
|
|
|
**Proxy Fetch:**
|
|
|
|
|

|
|
|
|
|
***
|
2026-05-14 10:03:15 +00:00
|
|
|
**Decisión según entorno**
|
2026-05-14 08:36:17 +00:00
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
|
2026-05-14 08:36:17 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Si es servidor usa llamada directa.
|
|
|
|
|
- Si es cliente usa el proxy interno.
|
2026-05-14 10:03:15 +00:00
|
|
|
- Se aplica caché corta (`revalidate: 60`).
|
2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 5) Servicios de proyectos (CRUD)
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
|
|
|
|
- Toda la lógica de proyectos vive aquí.
|
|
|
|
|
- La UI solo consume estos métodos, no la API directa.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**CRUD Proyectos:**
|
|
|
|
|

|
|
|
|
|
***
|
|
|
|
|
**CRUD Avanzado:**
|
|
|
|
|

|
|
|
|
|
***
|
|
|
|
|
**Ejemplo funcionamiento:**
|
|
|
|
|

|
|
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- `getProjects()` obtiene datos y los mapea a formato UI.
|
|
|
|
|
- `createProject()` crea en Dolibarr y devuelve el proyecto completo.
|
|
|
|
|
- Se controla el flujo de errores en un solo lugar.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 6) Mapeo de datos y estados
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Dolibarr devuelve datos crudos, la UI necesita formato amigable.
|
|
|
|
|
- Se normalizan fechas, presupuesto y progreso.
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Interfaz cruda y de UI para Proyectos:**
|
|
|
|
|

|
|
|
|
|
***
|
|
|
|
|
**Mapeador Proyectos:**
|
|
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Estados oficiales: 0 Borrador, 1 Activo, 2 Cerrado.
|
|
|
|
|
- El mapper convierte campos y define etiquetas visibles.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
## 7) Autenticación (login)
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
|
|
|
|
- El acceso está protegido por credenciales reales de Dolibarr.
|
2026-05-14 06:44:59 +00:00
|
|
|
- El token se guarda y permite navegar por la app.
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Servicio de autenticación:**
|
|
|
|
|

|
|
|
|
|
***
|
|
|
|
|
**Servicio de autenticación - 2:**
|
|
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- El login pide token a Dolibarr.
|
|
|
|
|
- Si es correcto, se guarda en localStorage y cookie.
|
|
|
|
|
- Se usa luego para validar sesiones.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 8) Middleware de acceso
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Qué capturar:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Archivo `middleware.ts`
|
|
|
|
|
- Lectura de cookie `dolibarr_auth_token`
|
2026-05-14 10:03:15 +00:00
|
|
|
- Redirección a `/login`
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Protege rutas privadas cuando no hay token.
|
2026-05-14 10:03:15 +00:00
|
|
|
- Bloquea acceso directo a la app sin autenticación.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Middleware:**
|
|
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Si no hay token, redirige a login.
|
|
|
|
|
- Si hay token, permite navegar.
|
2026-05-14 10:03:15 +00:00
|
|
|
- No valida con Dolibarr en cada request; solo comprueba token local.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 9) Seed de datos (demo reproducible)
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Por qué es importante:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- Permite crear datos realistas en minutos.
|
2026-05-14 10:03:15 +00:00
|
|
|
- La demo es consistente para la presentación.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Seed script:**
|
|
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- El seed elimina proyectos previos.
|
|
|
|
|
- Crea 14 proyectos con tareas.
|
2026-05-14 10:03:15 +00:00
|
|
|
- Los que están al 100% se cierran (status 2).
|
|
|
|
|
- Se ejecuta con `npm run seed`.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
## 10) Conexión entre piezas (flujo resumido)
|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Diagrama visual**
|
|
|
|
|

|
2026-05-14 06:44:59 +00:00
|
|
|
|
2026-05-14 10:03:15 +00:00
|
|
|
**Explicación:**
|
2026-05-14 06:44:59 +00:00
|
|
|
- La UI nunca toca la API directamente.
|
|
|
|
|
- El proxy y el cliente central simplifican el acceso.
|
2026-05-14 10:03:15 +00:00
|
|
|
- Dolibarr sigue siendo la fuente única de verdad.
|
2026-05-14 06:44:59 +00:00
|
|
|
|
|
|
|
|
---
|