diff --git a/presentaciones/levi/capturas/auth-service-2.png b/presentaciones/levi/capturas/auth-service-2.png new file mode 100644 index 0000000..5a1a991 Binary files /dev/null and b/presentaciones/levi/capturas/auth-service-2.png differ diff --git a/presentaciones/levi/capturas/auth-service.png b/presentaciones/levi/capturas/auth-service.png new file mode 100644 index 0000000..5e4ecaf Binary files /dev/null and b/presentaciones/levi/capturas/auth-service.png differ diff --git a/presentaciones/levi/capturas/crud-avanzado.png b/presentaciones/levi/capturas/crud-avanzado.png new file mode 100644 index 0000000..fa98958 Binary files /dev/null and b/presentaciones/levi/capturas/crud-avanzado.png differ diff --git a/presentaciones/levi/capturas/crud-proyectos.png b/presentaciones/levi/capturas/crud-proyectos.png new file mode 100644 index 0000000..7b0a481 Binary files /dev/null and b/presentaciones/levi/capturas/crud-proyectos.png differ diff --git a/presentaciones/levi/capturas/diagrama.svg b/presentaciones/levi/capturas/diagrama.svg new file mode 100644 index 0000000..b5a5a89 --- /dev/null +++ b/presentaciones/levi/capturas/diagrama.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UI (Next.js) + Frontend / Dashboard + + + + + + + + + + + + + + + + API Proxy + /api/dolibarr/... + Protege API key + + + + + + + + + + + + + + + + + + + Dolibarr + ERP / API REST + + + + + + + + + + + + + + + + + + MariaDB + Datos persistentes + + + + + + + + + La UI nunca toca directamente el ERP; pasa por el proxy que añade la API key. + + + \ No newline at end of file diff --git a/presentaciones/levi/capturas/ejemplo-endpoint-getprojects.png b/presentaciones/levi/capturas/ejemplo-endpoint-getprojects.png new file mode 100644 index 0000000..8d80d05 Binary files /dev/null and b/presentaciones/levi/capturas/ejemplo-endpoint-getprojects.png differ diff --git a/presentaciones/levi/capturas/interfaces-proyectos.png b/presentaciones/levi/capturas/interfaces-proyectos.png new file mode 100644 index 0000000..d66ae18 Binary files /dev/null and b/presentaciones/levi/capturas/interfaces-proyectos.png differ diff --git a/presentaciones/levi/capturas/mapeador-proyectos.png b/presentaciones/levi/capturas/mapeador-proyectos.png new file mode 100644 index 0000000..14f2405 Binary files /dev/null and b/presentaciones/levi/capturas/mapeador-proyectos.png differ diff --git a/presentaciones/levi/capturas/middleware.png b/presentaciones/levi/capturas/middleware.png new file mode 100644 index 0000000..fd7e0a5 Binary files /dev/null and b/presentaciones/levi/capturas/middleware.png differ diff --git a/presentaciones/levi/capturas/seed.png b/presentaciones/levi/capturas/seed.png new file mode 100644 index 0000000..df5f8cd Binary files /dev/null and b/presentaciones/levi/capturas/seed.png differ diff --git a/presentaciones/levi/codigo_interno.md b/presentaciones/levi/codigo_interno.md index 5094cdb..f2cae93 100644 --- a/presentaciones/levi/codigo_interno.md +++ b/presentaciones/levi/codigo_interno.md @@ -2,10 +2,10 @@ ## 1) Infraestructura (Docker) -**Por que es importante:** +**Por qué es importante:** - El proyecto depende de Dolibarr y una base de datos real. -- Docker permite reproducir el entorno en cualquier maquina. -- Sin Dolibarr activo, la API devuelve errores de conexion. +- Docker permite reproducir el entorno en cualquier máquina. +- Sin Dolibarr activo, la API devuelve errores de conexión. **Docker Desktop** ![Docker Desktop](capturas/servicios-levantados.png) @@ -16,18 +16,18 @@ **Explicación:** - Se levantan 2 servicios: MariaDB y Dolibarr. - Dolibarr expone el puerto `8200` para acceder al ERP. -- Las credenciales y modulos se configuran por variables de entorno. -- Los volumenes guardan datos persistentes. +- Las credenciales y módulos se configuran por variables de entorno. +- Los volúmenes guardan datos persistentes. --- -## 2) Variables de entorno (configuracion) +## 2) Variables de entorno (configuración) -**Por que es importante:** +**Por qué es importante:** - La app no funciona sin apuntar a la API de Dolibarr. - La API key se mantiene en servidor y no se expone al cliente. -**Env local(api borrada por temas de segurdad...)** +**Env local (API borrada por temas de seguridad...)** ![Env Local](capturas/env-local.png) **Explicación:** @@ -38,11 +38,11 @@ ## 3) Proxy API (seguridad de la API key) -**Por que es importante:** +**Por qué es importante:** - El frontend nunca habla directamente con Dolibarr. - El proxy agrega la key en servidor y protege credenciales. -**Metodos GET/POST/PUT/DELETE:** +**Métodos GET/POST/PUT/DELETE:** ![Route.ts](capturas/route.png) *** **Ejemplo llamada:** @@ -52,13 +52,14 @@ **Explicación:** - Todas las llamadas pasan por `/api/dolibarr/...`. - Se construye la URL real con `DOLIBARR_API_URL`. -- Se reenvian los metodos HTTP y se manejan errores. +- Se reenvían los métodos HTTP y se manejan errores. +- La API key nunca se expone al navegador; se inyecta en servidor. --- ## 4) Cliente central de Dolibarr -**Por que es importante:** +**Por qué es importante:** - Centraliza todas las llamadas a la API. - Simplifica los métodos de los servicios (proyectos, tareas, usuarios). @@ -68,31 +69,32 @@ **Proxy Fetch:** ![Proxy Fetch](capturas/proxy-fetch.png) *** -**Decisión segun entorno** +**Decisión según entorno** ![Decisión según entorno](capturas/decision.png) **Explicación:** - Si es servidor usa llamada directa. - Si es cliente usa el proxy interno. -- Se aplica cache corta (`revalidate: 60`). +- Se aplica caché corta (`revalidate: 60`). --- ## 5) Servicios de proyectos (CRUD) -**Que capturar:** -- Archivo `lib/projectsService.ts` -- `getProjects`, `createProject`, `updateProject`, `deleteProject` +**Por qué es importante:** +- Toda la lógica de proyectos vive aquí. +- La UI solo consume estos métodos, no la API directa. -**Por que es importante:** -- Toda la logica de proyectos vive aqui. -- La UI solo consume estos metodos, no la API directa. - -**Captura sugerida:** -![Projects Service](capturas/05-projects-service.png) - -**Guion corto:** +**CRUD Proyectos:** +![CRUD Projects Service](capturas/crud-proyectos.png) +*** +**CRUD Avanzado:** +![CRUD Advanced Service](capturas/crud-avanzado.png) +*** +**Ejemplo funcionamiento:** +![GET Endpoint example](capturas/ejemplo-endpoint-getprojects.png) +**Explicación:** - `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. @@ -101,39 +103,35 @@ ## 6) Mapeo de datos y estados -**Que capturar:** -- Archivo `types/project.ts` -- `ProjectStatus` y `STATUS_CONFIG` -- `mapDolibarrProject` - -**Por que es importante:** +**Por qué es importante:** - Dolibarr devuelve datos crudos, la UI necesita formato amigable. - Se normalizan fechas, presupuesto y progreso. -**Captura sugerida:** -![Project Types](capturas/06-project-types.png) +**Interfaz cruda y de UI para Proyectos:** +![Interfaces proyectos](capturas/interfaces-proyectos.png) +*** +**Mapeador Proyectos:** +![Mapeador Proyectos](capturas/mapeador-proyectos.png) -**Guion corto:** +**Explicación:** - Estados oficiales: 0 Borrador, 1 Activo, 2 Cerrado. - El mapper convierte campos y define etiquetas visibles. --- -## 7) Autenticacion (login) +## 7) Autenticación (login) -**Que capturar:** -- Archivo `lib/authService.ts` -- `login()` (llamada a `/login` de Dolibarr) -- `saveAuthData()` (localStorage + cookie) - -**Por que es importante:** -- El acceso esta protegido por credenciales reales de Dolibarr. +**Por qué es importante:** +- El acceso está protegido por credenciales reales de Dolibarr. - El token se guarda y permite navegar por la app. -**Captura sugerida:** -![Auth Service](capturas/07-auth-service.png) +**Servicio de autenticación:** +![Auth Service](capturas/auth-service.png) +*** +**Servicio de autenticación - 2:** +![Auth Service 2](capturas/auth-service-2.png) -**Guion corto:** +**Explicación:** - El login pide token a Dolibarr. - Si es correcto, se guarda en localStorage y cookie. - Se usa luego para validar sesiones. @@ -142,106 +140,50 @@ ## 8) Middleware de acceso -**Que capturar:** +**Qué capturar:** - Archivo `middleware.ts` - Lectura de cookie `dolibarr_auth_token` -- Redireccion a `/login` +- Redirección a `/login` -**Por que es importante:** +**Por qué es importante:** - Protege rutas privadas cuando no hay token. -- Bloquea acceso directo a la app sin autenticacion. +- Bloquea acceso directo a la app sin autenticación. -**Captura sugerida:** -![Middleware](capturas/08-middleware.png) +**Middleware:** +![Middleware](capturas/middleware.png) -**Guion corto:** +**Explicación:** - Si no hay token, redirige a login. - Si hay token, permite navegar. +- No valida con Dolibarr en cada request; solo comprueba token local. --- ## 9) Seed de datos (demo reproducible) -**Que capturar:** -- Archivo `scripts/seed-projects-via-api.js` -- Bloque de datos de proyectos -- Logica de limpieza y cierre de proyectos - -**Por que es importante:** +**Por qué es importante:** - Permite crear datos realistas en minutos. -- La demo es consistente para la presentacion. +- La demo es consistente para la presentación. -**Captura sugerida:** -![Seed Script](capturas/09-seed.png) +**Seed script:** +![Seed Script](capturas/seed.png) -**Guion corto:** +**Explicación:** - El seed elimina proyectos previos. - Crea 14 proyectos con tareas. -- Los que estan al 100% se cierran (status 2). +- Los que están al 100% se cierran (status 2). +- Se ejecuta con `npm run seed`. --- -## 10) Servicio de tareas +## 10) Conexión entre piezas (flujo resumido) -**Que capturar:** -- Archivo `lib/tasksService.ts` -- `getTasksByProjectId()` (filtra tareas por proyecto) +**Diagrama visual** +![Diagrama de Flujo Principal](capturas/diagrama.svg) -**Por que es importante:** -- Dolibarr no filtra bien por proyecto y se corrige en el cliente. -- Se calcula estadistica de tareas para el dashboard. - -**Captura sugerida:** -![Tasks Service](capturas/10-tasks-service.png) - -**Guion corto:** -- Se piden todas las tareas y se filtra por `fk_project`. -- Se calcula progreso y estadisticas de tareas. - ---- - -## 11) Manejo de errores y cache - -**Que capturar:** -- `lib/dolibarrClient.ts` (bloque de `revalidate: 60`) -- `app/api/dolibarr/[...path]/route.ts` (log de errores) - -**Por que es importante:** -- Explica por que a veces se ven datos antiguos. -- Muestra que los errores se controlan en el proxy. - -**Captura sugerida:** -![Cache and Errors](capturas/11-cache.png) - -**Guion corto:** -- Se usa cache corta para no saturar Dolibarr. -- Si Dolibarr esta apagado, la API responde con error. - ---- - -## 12) Conexion entre piezas (flujo resumido) - -**Que capturar:** -- Un diagrama o esquema simple (puede ser dibujado) mostrando: - UI -> Proxy -> Dolibarr -> DB - -**Guion corto:** +**Explicación:** - La UI nunca toca la API directamente. - El proxy y el cliente central simplifican el acceso. -- Dolibarr sigue siendo la fuente unica de verdad. +- Dolibarr sigue siendo la fuente única de verdad. --- - -## Anexo opcional: comandos utiles - -Puedes anadir al final un mini bloque con comandos para mostrar que sabes levantar el entorno: - -```bash -docker-compose up -d -npm run dev -npm run seed -``` - ---- - -Fin de las notas. Aqui solo pegas capturas y ajustas el texto que uses en la presentacion.