| # Backend - PoC SaaS Iframe |
|
|
| Este documento explica c贸mo funciona el backend del proyecto, qu茅 endpoints ofrece y c贸mo se integra con el frontend React. |
|
|
| ## Prop贸sito |
|
|
| El backend sirve como: |
|
|
| - API para autenticaci贸n con token, configuraci贸n y gesti贸n de sesiones. |
| - servidor de archivos est谩ticos para el build de React en producci贸n (`frontend/dist`). |
| - punto de entrada de administraci贸n, preview y experiencia embebida. |
| - watcher opcional que reconstruye el frontend cuando cambian los archivos fuente. |
|
|
| ## Estructura principal |
|
|
| - `main.py` - servidor FastAPI principal. |
| - `requirements.txt` - dependencias Python. |
| - `run_server.bat` - helper para arrancar el backend con el virtual environment local. |
| - `.venv/` - entorno virtual Python del backend. |
| - `home.html`, `admin.html`, `preview.html` - p谩ginas de apoyo. |
|
|
| ## C贸mo ejecutar |
|
|
| ### Activar entorno virtual |
|
|
| En Windows CMD: |
|
|
| ```cmd |
| cd /d C:\Users\alane\OneDrive\Escritorio\Prueba-PoC\backend |
| .venv\Scripts\activate |
| ``` |
|
|
| En PowerShell: |
|
|
| ```powershell |
| cd C:\Users\alane\OneDrive\Escritorio\Prueba-PoC\backend |
| .\.venv\Scripts\Activate.ps1 |
| ``` |
|
|
| ### Instalar dependencias |
|
|
| ```cmd |
| pip install -r requirements.txt |
| ``` |
|
|
| ### Ejecutar servidor |
|
|
| ```cmd |
| python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000 |
| ``` |
|
|
| O usar el helper: |
|
|
| ```cmd |
| run_server.bat |
| ``` |
|
|
| ## Comportamiento de producci贸n |
|
|
| En producci贸n, el backend sirve el build de React desde `frontend/dist` en la ruta `/app`. |
|
|
| - El HTML principal se carga en `/app` |
| - Los assets de Vite se sirven en `/app/assets/...` |
| - Si `frontend/dist/index.html` no existe, se devuelve un mensaje de error claro. |
|
|
| ## Endpoints principales |
|
|
| ### P谩ginas y visualizaci贸n |
|
|
| - `GET /` - `home.html` |
| - `GET /preview` - `preview.html` |
| - `GET /admin` - `admin.html` |
| - `GET /app` - React app est谩tica servida desde `frontend/dist` |
| - `GET /widget.js` - script JS que inyecta un iframe con el visualizador |
| - `GET /health` - estado del backend y si el frontend build est谩 listo |
|
|
| ### API de integraci贸n |
|
|
| - `POST /api/token` - genera un token temporal para `client_id` |
| - `GET /config` - devuelve datos del cliente seg煤n `client_id` o `token` |
| - `POST /session/start` - marca la sesi贸n como activa |
| - `GET /api/keys` - lista clientes registrados |
| - `POST /api/generate-key` - genera una nueva API key de cliente |
| - `GET /api/active-sessions` - muestra sesiones activas actuales |
|
|
| ## L贸gica de token y cliente |
|
|
| ### Validaci贸n de token |
|
|
| - Los tokens se guardan en memoria en `TOKENS` |
| - Cada token vence despu茅s de `TOKEN_TTL` segundos |
| - Si el token ha expirado, se devuelve `401` |
|
|
| ### Configuraci贸n del cliente |
|
|
| - El diccionario `CLIENTS` contiene los clientes registrados por defecto |
| - Cada cliente tiene `nombre`, `color_primario` y `created_at` |
| - `POST /api/generate-key` agrega un nuevo cliente a `CLIENTS` |
|
|
| ## Seguridad y headers importantes |
|
|
| El backend habilita: |
|
|
| - CORS abierto (`allow_origins=["*"]`) para facilitar el desarrollo |
| - Eliminaci贸n de `x-frame-options` en todas las respuestas |
| - Agrega `Content-Security-Policy: frame-ancestors *` para permitir iframes |
|
|
| ## Watcher autom谩tico de frontend |
|
|
| El backend tambi茅n incluye un watcher que observa cambios en el frontend y ejecuta `npm run build` autom谩ticamente. |
|
|
| ### Qu茅 archivos vigila |
|
|
| - `frontend/src/**/*.{ts,tsx,js,jsx,css,json,html}` |
| - `frontend/vite.config.ts` |
| - `frontend/package.json` |
| - `frontend/tsconfig.json` |
|
|
| ### C贸mo funciona |
|
|
| - Si el backend est谩 ejecut谩ndose, el watcher corre en un hilo daemon. |
| - Cuando detecta cambios, ejecuta `npm run build` en `frontend/`. |
| - El resultado actualiza `frontend/dist` para que `/app` sirva la versi贸n nueva. |
|
|
| ### Requisitos del watcher |
|
|
| - Necesitas tener `npm` instalado y accesible desde el PATH. |
| - El backend debe arrancarse desde el directorio ra铆z del proyecto. |
|
|
| ## Desarrollo y producci贸n |
|
|
| ### Desarrollo |
|
|
| - Para trabajar en el frontend con hot reload, usa el dev server de Vite: |
|
|
| ```cmd |
| cd /d C:\Users\alane\OneDrive\Escritorio\Prueba-PoC\frontend |
| npm run dev |
| ``` |
|
|
| - Abre `http://localhost:5173/app?token=...` |
|
|
| ### Producci贸n / backend |
|
|
| - Para servir el frontend est谩tico desde el backend: |
|
|
| ```cmd |
| cd /d C:\Users\alane\OneDrive\Escritorio\Prueba-PoC\frontend |
| npm run build |
| ``` |
|
|
| - Luego carga `http://localhost:8000/app?token=...` |
|
|
| ## Integraci贸n con hyper-ferreteria |
|
|
| Este backend puede montar la l贸gica de `hyper-ferreteria` en un prefijo alterno para evitar conflictos de rutas. |
|
|
| - Se carga si la carpeta `../hyper-ferreteria` existe junto al directorio `Prueba-PoC`. |
| - La integraci贸n queda disponible en `http://localhost:8000/hf`. |
| - Las rutas internas de `hyper-ferreteria` se exponen como: |
| - `http://localhost:8000/hf/upload_async` |
| - `http://localhost:8000/hf/segment_guided` |
| - `http://localhost:8000/hf/analyze_scene` |
| - `http://localhost:8000/hf/apply_texture` |
| - `http://localhost:8000/hf/textures` |
| - `http://localhost:8000/hf/image/{filename}` |
| - `http://localhost:8000/hf/masks/{filename}` |
| - `http://localhost:8000/hf/ai/{filename}` |
| - y otras rutas de `hyper-ferreteria` con el prefijo `/hf` |
|
|
| ## Docker |
|
|
| Se a帽adi贸 soporte Docker al backend con un `Dockerfile` y `.dockerignore`. |
|
|
| - El contenedor expone el puerto `8000`. |
| - El servicio arranca con `uvicorn main:app --host 0.0.0.0 --port 8000`. |
| - El `requirements.txt` del backend fue ampliado para incluir las dependencias de `hyper-ferreteria`. |
|
|
| Para construir y correr: |
|
|
| ```cmd |
| cd /d C:\Users\alane\OneDrive\Escritorio\Trabajo\Prueba-PoC\backend |
| docker build -t prueba-poc-backend . |
| docker run -p 8000:8000 prueba-poc-backend |
| ``` |
|
|
| ## Notas para nuevos desarrolladores |
|
|
| - El backend es el origen de verdad para la l贸gica de seguridad y sesiones. |
| - El frontend puede correr en modo dev para desarrollo r谩pido. |
| - En producci贸n, el backend usa el build est谩tico de React. |
| - Si un cambio en `frontend/src` no se refleja, revisa si est谩s usando `5173` (dev) o `8000` (backend+build). |
|
|