trello_fake/presentaciones/levi/codigo_interno.md

248 lines
6.0 KiB
Markdown

## 1) Infraestructura (Docker)
**Por que 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 Desktop**
![Docker Desktop](capturas/servicios-levantados.png)
***
**Docker compose**
![Docker Compose](capturas/docker-compose.png)
**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.
---
## 2) Variables de entorno (configuracion)
**Por que 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](capturas/env-local.png)
**Explicación:**
- 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)
**Por que es importante:**
- El frontend nunca habla directamente con Dolibarr.
- El proxy agrega la key en servidor y protege credenciales.
**Metodos GET/POST/PUT/DELETE:**
![Route.ts](capturas/route.png)
***
**Ejemplo llamada:**
![Ejemplo llamada](capturas/ejemplo-llamada.png)
**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.
---
## 4) Cliente central de Dolibarr
**Por que es importante:**
- Centraliza todas las llamadas a la API.
- Simplifica los métodos de los servicios (proyectos, tareas, usuarios).
**Direct Fetch:**
![Direct Fetch](capturas/direct-fetch.png)
***
**Proxy Fetch:**
![Proxy Fetch](capturas/proxy-fetch.png)
***
**Decisión segun 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`).
---
## 5) Servicios de proyectos (CRUD)
**Que capturar:**
- Archivo `lib/projectsService.ts`
- `getProjects`, `createProject`, `updateProject`, `deleteProject`
**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:**
- `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
**Que capturar:**
- Archivo `types/project.ts`
- `ProjectStatus` y `STATUS_CONFIG`
- `mapDolibarrProject`
**Por que 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)
**Guion corto:**
- Estados oficiales: 0 Borrador, 1 Activo, 2 Cerrado.
- El mapper convierte campos y define etiquetas visibles.
---
## 7) Autenticacion (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.
- El token se guarda y permite navegar por la app.
**Captura sugerida:**
![Auth Service](capturas/07-auth-service.png)
**Guion corto:**
- 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
**Que capturar:**
- Archivo `middleware.ts`
- Lectura de cookie `dolibarr_auth_token`
- Redireccion a `/login`
**Por que es importante:**
- Protege rutas privadas cuando no hay token.
- Bloquea acceso directo a la app sin autenticacion.
**Captura sugerida:**
![Middleware](capturas/08-middleware.png)
**Guion corto:**
- Si no hay token, redirige a login.
- Si hay token, permite navegar.
---
## 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:**
- Permite crear datos realistas en minutos.
- La demo es consistente para la presentacion.
**Captura sugerida:**
![Seed Script](capturas/09-seed.png)
**Guion corto:**
- El seed elimina proyectos previos.
- Crea 14 proyectos con tareas.
- Los que estan al 100% se cierran (status 2).
---
## 10) Servicio de tareas
**Que capturar:**
- Archivo `lib/tasksService.ts`
- `getTasksByProjectId()` (filtra tareas por proyecto)
**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:**
- La UI nunca toca la API directamente.
- El proxy y el cliente central simplifican el acceso.
- Dolibarr sigue siendo la fuente unica 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.