revision de cloud code

This commit is contained in:
2026-06-21 17:29:16 +02:00
parent 98fd85226b
commit 8c381d98a6
22 changed files with 614 additions and 206 deletions
+35 -13
View File
@@ -13,7 +13,16 @@ El frontend (HTML/JS puro) sigue siendo el de la landing, pero **las reservas, c
## Cómo ejecutar (Desarrollo y Producción)
### 1. Levantar todo
### 1. Configurar secretos
```sh
cp .env.example .env
# Edita .env: pon tu EA_API_KEY y una MYSQL_ROOT_PASSWORD fuerte.
```
`.env` está en `.gitignore` y nunca se sube al repositorio.
### 2. Levantar todo
```sh
docker compose up -d --build
@@ -22,7 +31,7 @@ docker compose up -d --build
- Landing + reservas: **http://localhost:8234**
- Panel de administración EasyAppointments: **http://localhost:8888**
### 2. Primer arranque (importante)
### 3. Primer arranque (importante)
1. Abre http://localhost:8888
2. Completa el asistente de instalación de EasyAppointments.
@@ -33,13 +42,11 @@ docker compose up -d --build
7. Configura el **Working Plan** del proveedor (horario).
8. **Anota el ID del Provider** (normalmente 1) y edita `static/index.html` → línea `const PROVIDER_ID = 1;`
### 3. Variables importantes en compose
### Variables (en `.env`)
Edita `docker-compose.yml` antes de levantar:
- `EA_API_USERNAME` + `EA_API_PASSWORD` (o mejor: configura **API Key** en Settings de EA y usa `EA_API_KEY`)
- `BASE_URL` del servicio `easyappointments`
- Contraseña de MySQL
- `EA_API_KEY` — token de API de EasyAppointments (Settings → API en el panel).
- `MYSQL_ROOT_PASSWORD` — contraseña de la base de datos.
- `EA_BASE_URL` — URL pública del panel de EA (cámbiala en producción).
### Actualizar
@@ -50,12 +57,27 @@ docker compose up -d --build
## Notas sobre la integración
- Los servicios y la disponibilidad los obtiene el frontend directamente de la API de EasyAppointments.
- Al reservar:
- Busca o crea automáticamente el cliente usando el **email**.
- Crea la cita en EasyAppointments (con todos los servicios seleccionados en las notas).
**EasyAppointments es la única fuente de verdad.** El servidor Go no guarda nada:
ni clientes, ni citas, ni servicios. Todo se lee y se escribe contra la API de EA.
- Los servicios y la disponibilidad los lee el frontend de EA (a través del proxy de solo lectura).
- Al reservar, el navegador envía la selección a `POST /api/book` y **el servidor**:
- lee los servicios de EA (fuente de verdad de nombre y duración),
- busca o crea el cliente por **email**,
- crea **una** cita con el servicio de mayor duración y el bloque total en las notas.
- La gestión completa (clientes, servicios, citas, proveedores, etc.) se hace desde http://localhost:8888
- La API antigua (carpeta `api/` + admin.html antigua + services.yml/mail.yml) ha sido eliminada completamente.
## Seguridad del proxy
El servidor Go **no** expone la API de EasyAppointments tal cual:
- El proxy `/ea-api/` solo deja pasar **lecturas no sensibles** (categorías, servicios,
proveedor, disponibilidad), añadiendo la auth admin en el servidor. La lista blanca
está en `main.go` (`eaAllowedRoutes`); cualquier otra ruta/método recibe `404`
**antes** de inyectar credenciales.
- Las **escrituras y la búsqueda de clientes** no pasan por el proxy: se orquestan
server-side en `POST /api/book`. Así el navegador nunca puede listar/borrar/modificar
clientes ni citas, ni volcar datos personales de EA.
## Comportamiento multiservicio