eduardo4547's picture
Upload 150 files
cb5d9d0 verified
# 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).