|
|
@@ -1,348 +1,183 @@
|
|
|
-# Biergarten Klein - Sistema de Pedidos Express
|
|
|
-
|
|
|
-## Descripción del Proyecto
|
|
|
-
|
|
|
-**Biergarten Klein** es una aplicación web completa para la gestión de pedidos en un bar cervecero artesanal. El sistema permite a los clientes interactuar con un asistente de IA llamado "Camilo Klein" para consultar el menú, recibir recomendaciones de cervezas artesanales, realizar pedidos y gestionar su experiencia en el establecimiento.
|
|
|
-
|
|
|
-## Características Principales
|
|
|
-
|
|
|
-### 🤖 Asistente de IA Personalizado
|
|
|
-- **Camilo Klein**: Chatbot especializado en el menú del bar
|
|
|
-- Integración con OpenAI GPT-4o-mini
|
|
|
-- Respuestas carismáticas con emojis
|
|
|
-- Base de conocimientos específica sobre cervezas artesanales
|
|
|
-- Sistema anti-abuso con tokens de sesión
|
|
|
-
|
|
|
-### 🍺 Gestión de Productos
|
|
|
-- Catálogo completo de cervezas artesanales (Burlesque, Queen Burlesque, Hoppy Mosh, Black Mamba, etc.)
|
|
|
-- Sistema de carrito de compras interactivo
|
|
|
-- Información detallada de cada cerveza (IBU, SRM, notas de sabor)
|
|
|
-- Precios y disponibilidad en tiempo real
|
|
|
-
|
|
|
-### 🧾 Sistema de Pedidos
|
|
|
-- Procesamiento de pedidos con validación
|
|
|
-- Integración con impresora térmica USB
|
|
|
-- Sincronización con sistema Fudo POS
|
|
|
-- Notificaciones por email en caso de errores
|
|
|
-- Logging completo de transacciones
|
|
|
-
|
|
|
-### 🔐 Seguridad y Autenticación
|
|
|
-- Sistema de tokens anti-abuso
|
|
|
-- Validación de usuarios
|
|
|
-- Protección de endpoints sensibles
|
|
|
-- Middleware de sesiones seguras
|
|
|
-
|
|
|
-## Estructura del Proyecto
|
|
|
-
|
|
|
-```
|
|
|
-pedidos_express/
|
|
|
-├── main.py # Punto de entrada principal
|
|
|
-├── app.py # Configuración FastAPI y rutas
|
|
|
-├── requirements.txt # Dependencias del proyecto
|
|
|
-├── tailwind.config.js # Configuración de Tailwind CSS
|
|
|
-├── config/
|
|
|
-│ ├── __init__.py
|
|
|
-│ └── settings.py # Variables de entorno y logging
|
|
|
-├── models/
|
|
|
-│ ├── __init__.py
|
|
|
-│ └── schemas.py # Modelos Pydantic (Message, Order, User)
|
|
|
-├── auth/
|
|
|
-│ ├── __init__.py
|
|
|
-│ └── security.py # Autenticación y tokens anti-abuso
|
|
|
-├── services/
|
|
|
-│ ├── __init__.py
|
|
|
-│ ├── data_service.py # Gestión de datos y productos
|
|
|
-│ ├── openai_service.py # Integración con OpenAI
|
|
|
-│ ├── email_service.py # Notificaciones por email
|
|
|
-│ ├── fudo_service.py # Integración con Fudo POS
|
|
|
-│ └── logging_service.py # Sistema de logs
|
|
|
-├── routes/
|
|
|
-│ ├── __init__.py
|
|
|
-│ ├── chat.py # Endpoints del chatbot
|
|
|
-│ ├── users.py # Gestión de usuarios
|
|
|
-│ ├── products.py # Catálogo de productos
|
|
|
-│ ├── orders.py # Procesamiento de pedidos
|
|
|
-│ └── static.py # Archivos estáticos
|
|
|
-├── impresora/ # Módulo de impresión térmica
|
|
|
-│ ├── __init__.py
|
|
|
-│ ├── order.py # Modelos para órdenes de impresión
|
|
|
-│ └── printer.py # Control de impresora USB
|
|
|
-├── fudo/ # Integración con Fudo POS
|
|
|
-│ └── fudo.py # API y gestión de tokens
|
|
|
-├── data/ # Almacenamiento de datos
|
|
|
-│ ├── data.db # Base de datos SQLite
|
|
|
-│ ├── llm_data.json # Base de conocimientos para IA
|
|
|
-│ └── products.json # Catálogo de productos
|
|
|
-├── public/ # Frontend web
|
|
|
-│ ├── index.html # Página principal
|
|
|
-│ ├── styles.css # Estilos personalizados
|
|
|
-│ ├── assets/ # Recursos multimedia
|
|
|
-│ └── js/
|
|
|
-│ ├── app.js # Lógica principal del frontend
|
|
|
-│ ├── interfaces.js # Interfaces de usuario
|
|
|
-│ └── service/ # Servicios del frontend
|
|
|
-│ ├── auth.js # Autenticación cliente
|
|
|
-│ ├── chat.js # Comunicación con chatbot
|
|
|
-│ └── product.js # Gestión de productos
|
|
|
-└── logs/ # Archivos de log
|
|
|
- └── app.log # Logs de la aplicación
|
|
|
-```
|
|
|
-
|
|
|
-## Tecnologías Utilizadas
|
|
|
-
|
|
|
-### Backend
|
|
|
-- **FastAPI**: Framework web moderno y rápido
|
|
|
-- **Python 3.9+**: Lenguaje de programación principal
|
|
|
-- **OpenAI API**: Integración con GPT-4o-mini para el chatbot
|
|
|
-- **SQLite**: Base de datos local
|
|
|
-- **Redis**: Cache para tokens de autenticación
|
|
|
-- **Uvicorn**: Servidor ASGI para producción
|
|
|
-
|
|
|
-### Frontend
|
|
|
-- **HTML5/CSS3/JavaScript**: Tecnologías web estándar
|
|
|
-- **Tailwind CSS**: Framework de estilos utilitarios
|
|
|
-- **Vanilla JavaScript**: Sin frameworks adicionales para máximo rendimiento
|
|
|
-
|
|
|
-### Integraciones
|
|
|
-- **Fudo POS**: Sistema de punto de venta
|
|
|
-- **Impresora Térmica USB**: Para tickets de pedidos
|
|
|
-- **SMTP**: Envío de notificaciones por email
|
|
|
-
|
|
|
-## Módulos Principales
|
|
|
-
|
|
|
-### config/settings.py
|
|
|
-- Configuración centralizada de la aplicación
|
|
|
-- Gestión de variables de entorno
|
|
|
-- Sistema de logging configurado
|
|
|
-- Validación de configuración crítica
|
|
|
-
|
|
|
-### models/schemas.py
|
|
|
-- **Message**: Estructura para mensajes del chat
|
|
|
-- **ChatCompletionRequest**: Requests para el chatbot
|
|
|
-- **OrderWeb**: Modelo completo de pedidos
|
|
|
-- **ItemWeb**: Elementos individuales del pedido
|
|
|
-- **UserCodeRequest**: Validación de códigos de usuario
|
|
|
-
|
|
|
-### auth/security.py
|
|
|
-- **Sistema de tokens anti-abuso**: Protección contra uso excesivo
|
|
|
-- **Validación de sesiones**: Control de acceso a endpoints
|
|
|
-- **Middleware de seguridad**: Protección de rutas sensibles
|
|
|
-- **Generación segura de tokens**: Utilizando secrets
|
|
|
-
|
|
|
-### services/
|
|
|
-- **data_service.py**: Carga y gestión de productos, usuarios y datos del menú
|
|
|
-- **openai_service.py**: Integración completa con OpenAI para el asistente Camilo Klein
|
|
|
-- **email_service.py**: Sistema de notificaciones por correo electrónico
|
|
|
-- **fudo_service.py**: Integración bidireccional con el sistema Fudo POS
|
|
|
-- **logging_service.py**: Registro detallado de pedidos y respuestas del LLM
|
|
|
-
|
|
|
-### routes/
|
|
|
-- **chat.py**:
|
|
|
- - `/api/chat/init-chat` - Inicialización del chat y generación de tokens
|
|
|
- - `/api/chat/completions` - Procesamiento de mensajes del chatbot
|
|
|
-- **users.py**:
|
|
|
- - `/api/existsUser` - Validación de códigos de usuario
|
|
|
-- **products.py**:
|
|
|
- - `/api/get_products` - Obtención del catálogo completo
|
|
|
-- **orders.py**:
|
|
|
- - `/api/printer/order` - Procesamiento e impresión de pedidos
|
|
|
-- **static.py**:
|
|
|
- - Servir archivos estáticos y página principal
|
|
|
-
|
|
|
-## API Endpoints
|
|
|
-
|
|
|
-### Chat y Asistente IA
|
|
|
-```
|
|
|
-GET /api/chat/init-chat # Inicializar sesión de chat
|
|
|
-POST /api/chat/completions # Enviar mensaje al asistente
|
|
|
-```
|
|
|
-
|
|
|
-### Gestión de Productos
|
|
|
-```
|
|
|
-GET /api/get_products # Obtener catálogo de productos
|
|
|
-```
|
|
|
-
|
|
|
-### Gestión de Pedidos
|
|
|
-```
|
|
|
-POST /api/printer/order # Procesar y imprimir pedido
|
|
|
-```
|
|
|
-
|
|
|
-### Usuarios
|
|
|
-```
|
|
|
-POST /api/existsUser # Validar código de usuario
|
|
|
-```
|
|
|
-
|
|
|
-## Flujo de la Aplicación
|
|
|
-
|
|
|
-1. **Inicialización**: El usuario accede a la página principal
|
|
|
-2. **Autenticación**: Se genera un token anti-abuso para la sesión
|
|
|
-3. **Exploración**: El usuario puede consultar productos y chatear con Camilo Klein
|
|
|
-4. **Pedido**: Selección de productos y agregado al carrito
|
|
|
-5. **Procesamiento**: Validación, impresión y sincronización con Fudo POS
|
|
|
-6. **Confirmación**: Notificación al usuario y registro en logs
|
|
|
-
|
|
|
-## Base de Conocimientos del Asistente
|
|
|
-
|
|
|
-El asistente Camilo Klein utiliza una base de datos especializada (`llm_data.json`) que incluye:
|
|
|
-
|
|
|
-- **Información del establecimiento**: Historia y concepto del Biergarten Klein
|
|
|
-- **Catálogo completo de cervezas**: 15+ variedades artesanales con detalles técnicos
|
|
|
-- **Recomendaciones especializadas**: Sugerencias basadas en preferencias
|
|
|
-- **Información nutricional y técnica**: IBU, SRM, graduación alcohólica
|
|
|
-- **Horarios y ubicación**: Datos prácticos para los clientes
|
|
|
-
|
|
|
-## Características Técnicas Avanzadas
|
|
|
-
|
|
|
-### Sistema de Logging
|
|
|
-- Registro detallado de todas las interacciones
|
|
|
-- Logs estructurados con timestamps
|
|
|
-- Separación por niveles (INFO, WARNING, ERROR)
|
|
|
-- Rotación automática de archivos de log
|
|
|
-
|
|
|
-### Integración con Hardware
|
|
|
-- **Impresora térmica USB**: Detección automática y manejo de errores
|
|
|
-- **Códigos de barras**: Generación para tracking de pedidos
|
|
|
-- **Notificaciones automáticas**: Email en caso de fallos de hardware
|
|
|
-
|
|
|
-### Gestión de Estado
|
|
|
-- **Redis para cache**: Tokens de autenticación y sesiones
|
|
|
-- **SQLite para persistencia**: Datos permanentes y históricos
|
|
|
-- **JSON para configuración**: Datos del menú y configuraciones
|
|
|
-
|
|
|
-## Ventajas de la Arquitectura
|
|
|
-
|
|
|
-1. **Modularidad**: Cada componente tiene responsabilidades específicas
|
|
|
-2. **Escalabilidad**: Fácil agregar nuevas funcionalidades
|
|
|
-3. **Mantenibilidad**: Código organizado y bien documentado
|
|
|
-4. **Testabilidad**: Componentes aislados para pruebas unitarias
|
|
|
-5. **Seguridad**: Múltiples capas de protección
|
|
|
-6. **Performance**: Optimizado para respuestas rápidas
|
|
|
-
|
|
|
-## Instalación y Configuración
|
|
|
-
|
|
|
-### Prerequisitos
|
|
|
-```bash
|
|
|
-Python 3.9+
|
|
|
-Redis Server
|
|
|
-Impresora térmica USB (opcional)
|
|
|
-```
|
|
|
-
|
|
|
-### Instalación
|
|
|
-```bash
|
|
|
-# Clonar el repositorio
|
|
|
-git clone [repository-url]
|
|
|
-cd pedidos_express
|
|
|
-
|
|
|
-# Instalar dependencias
|
|
|
-pip install -r requirements.txt
|
|
|
-
|
|
|
-# Configurar variables de entorno
|
|
|
-cp .env.example .env
|
|
|
-```
|
|
|
-
|
|
|
-### Variables de Entorno Requeridas
|
|
|
-```env
|
|
|
-# OpenAI Configuration
|
|
|
-OPENAI_API_KEY=tu_api_key_de_openai
|
|
|
-
|
|
|
-# Security
|
|
|
-SECRET_KEY=tu_clave_secreta_muy_segura
|
|
|
-
|
|
|
-# Server Configuration
|
|
|
-PORT=6001
|
|
|
-LOG_LEVEL=INFO
|
|
|
-
|
|
|
-# Fudo POS Integration
|
|
|
-FUDO_API_KEY=tu_api_key_fudo
|
|
|
-FUDO_API_SECRET=tu_api_secret_fudo
|
|
|
-
|
|
|
-# Redis Configuration
|
|
|
-REDIS_HOST=localhost
|
|
|
-REDIS_PORT=6379
|
|
|
-REDIS_DB=0
|
|
|
-
|
|
|
-# Email Configuration (opcional)
|
|
|
-SMTP_HOST=smtp.gmail.com
|
|
|
-SMTP_PORT=587
|
|
|
-SMTP_USER=tu_email@gmail.com
|
|
|
-SMTP_PASSWORD=tu_password_de_app
|
|
|
-```
|
|
|
-
|
|
|
-## Ejecución
|
|
|
-
|
|
|
-### Desarrollo
|
|
|
-```bash
|
|
|
+# **Biergarten Klein \- Sistema de Pedidos Express**
|
|
|
+
|
|
|
+Este proyecto es el backend de una aplicación web de gestión de pedidos para el bar cervecero artesanal **Biergarten Klein**. Está construido con **FastAPI** y proporciona una API RESTful para gestionar productos, pedidos, usuarios y un asistente de IA ("Camilo Klein") basado en OpenAI.
|
|
|
+
|
|
|
+## **🚀 Puesta en Marcha (Getting Started)**
|
|
|
+
|
|
|
+Sigue estos pasos para levantar el entorno de desarrollo local.
|
|
|
+
|
|
|
+### **1\. Prerrequisitos**
|
|
|
+
|
|
|
+* **Python 3.9+**
|
|
|
+* **Servidor Redis** (para la gestión de tokens y sesiones)
|
|
|
+* (Opcional) Una impresora térmica USB configurada en el sistema.
|
|
|
+
|
|
|
+### **2\. Instalación**
|
|
|
+
|
|
|
+1. Clona el repositorio:
|
|
|
+ git clone \[repository-url\]
|
|
|
+ cd pedidos\_express\_server
|
|
|
+
|
|
|
+2. Crea y activa un entorno virtual (recomendado):
|
|
|
+ python \-m venv venv
|
|
|
+ source venv/bin/activate \# En Windows: venv\\Scripts\\activate
|
|
|
+
|
|
|
+3. Instala las dependencias:
|
|
|
+ pip install \-r requirements.txt
|
|
|
+
|
|
|
+4. Configura las variables de entorno. Crea un archivo .env en la raíz del proyecto basándote en el archivo .env.example (o el .env proporcionado si ya lo tienes).
|
|
|
+
|
|
|
+### **3\. Variables de Entorno (.env)**
|
|
|
+
|
|
|
+Asegúrate de que tu archivo .env contenga las siguientes claves:
|
|
|
+
|
|
|
+\# \--- Configuración del Servidor \---
|
|
|
+PORT=6001
|
|
|
+LOG\_LEVEL=INFO
|
|
|
+
|
|
|
+\# \--- Seguridad (¡Genera claves seguras\!) \---
|
|
|
+SECRET\_KEY=tu\_clave\_secreta\_muy\_segura
|
|
|
+
|
|
|
+\# \--- OpenAI API \---
|
|
|
+OPENAI\_API\_KEY=tu\_api\_key\_de\_openai
|
|
|
+
|
|
|
+\# \--- Redis \---
|
|
|
+REDIS\_HOST=localhost
|
|
|
+REDIS\_PORT=6379
|
|
|
+REDIS\_DB=0
|
|
|
+
|
|
|
+\# \--- Fudo POS \---
|
|
|
+FUDO\_API\_KEY=tu\_api\_key\_fudo
|
|
|
+FUDO\_API\_SECRET=tu\_api\_secret\_fudo
|
|
|
+
|
|
|
+\# \--- Email (para notificaciones de error) \---
|
|
|
+SMTP\_HOST=smtp.gmail.com
|
|
|
+SMTP\_PORT=587
|
|
|
+SMTP\_USER=tu\_email@gmail.com
|
|
|
+SMTP\_PASSWORD=tu\_password\_de\_app
|
|
|
+
|
|
|
+### **4\. Ejecución**
|
|
|
+
|
|
|
+#### **Modo Desarrollo**
|
|
|
+
|
|
|
+Ejecuta el servidor con Uvicorn para recarga automática (como se define en main.py):
|
|
|
+
|
|
|
python main.py
|
|
|
-```
|
|
|
-
|
|
|
-### Producción
|
|
|
-```bash
|
|
|
-gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:6001
|
|
|
-```
|
|
|
-
|
|
|
-## Monitoreo y Logs
|
|
|
-
|
|
|
-### Archivos de Log
|
|
|
-- `logs/app.log`: Log principal de la aplicación
|
|
|
-- `logs.csv`: Registro de interacciones del LLM
|
|
|
-
|
|
|
-### Métricas Monitoreadas
|
|
|
-- Tiempo de respuesta del chatbot
|
|
|
-- Errores de impresión
|
|
|
-- Fallos de conexión con Fudo POS
|
|
|
-- Uso del sistema anti-abuso
|
|
|
-
|
|
|
-## Seguridad
|
|
|
-
|
|
|
-### Medidas Implementadas
|
|
|
-- **Tokens anti-abuso**: Prevención de spam y uso excesivo
|
|
|
-- **Validación de entrada**: Sanitización de todos los inputs
|
|
|
-- **Protección CSRF**: Tokens de sesión seguros
|
|
|
-- **Rate limiting**: Control de frecuencia de requests
|
|
|
-- **Logging de seguridad**: Registro de intentos de acceso no autorizado
|
|
|
-
|
|
|
-## Desarrollo y Contribución
|
|
|
-
|
|
|
-### Estructura de Commits
|
|
|
-- `feat:` Nuevas características
|
|
|
-- `fix:` Corrección de bugs
|
|
|
-- `docs:` Documentación
|
|
|
-- `style:` Formateo de código
|
|
|
-- `refactor:` Refactorización
|
|
|
-- `test:` Pruebas
|
|
|
-
|
|
|
-### Testing
|
|
|
-```bash
|
|
|
-# Ejecutar tests unitarios
|
|
|
-python -m pytest tests/
|
|
|
-
|
|
|
-# Tests de integración
|
|
|
-python -m pytest tests/integration/
|
|
|
-```
|
|
|
-
|
|
|
-## Roadmap Futuro
|
|
|
-
|
|
|
-### Próximas Características
|
|
|
-- [ ] Sistema de reservas de mesas
|
|
|
-- [ ] Programa de fidelización
|
|
|
-- [ ] Integración con redes sociales
|
|
|
-- [ ] App móvil nativa
|
|
|
-- [ ] Dashboard de analytics
|
|
|
-- [ ] Sistema de reviews y ratings
|
|
|
-
|
|
|
-### Mejoras Técnicas
|
|
|
-- [ ] Migración a PostgreSQL
|
|
|
-- [ ] Implementación de microservicios
|
|
|
-- [ ] Containerización con Docker
|
|
|
-- [ ] CI/CD con GitHub Actions
|
|
|
-- [ ] Monitoreo con Prometheus
|
|
|
-
|
|
|
-## Soporte y Contacto
|
|
|
-
|
|
|
-Para soporte técnico o consultas sobre el proyecto, contactar al equipo de desarrollo.
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-**Versión**: 1.0.0
|
|
|
-**Última actualización**: Julio 2025
|
|
|
-**Licencia**: Privada - Biergarten Klein
|
|
|
+
|
|
|
+La aplicación estará disponible en http://localhost:6001.
|
|
|
+
|
|
|
+#### **Modo Producción**
|
|
|
+
|
|
|
+Usa Gunicorn para gestionar los workers de Uvicorn:
|
|
|
+
|
|
|
+gunicorn \-w 4 \-k uvicorn.workers.UvicornWorker app:app \--bind 0.0.0.0:6001
|
|
|
+
|
|
|
+## **🏗️ Resumen de la Arquitectura**
|
|
|
+
|
|
|
+El proyecto sigue una arquitectura modular separando la configuración, la lógica de negocio, las rutas y los modelos de datos.
|
|
|
+
|
|
|
+* **main.py**: Punto de entrada principal. Inicia el servidor Uvicorn leyendo la configuración.
|
|
|
+* **app.py**: Corazón de la aplicación FastAPI. Aquí se configuran los middlewares (CORS, NoCache), se montan las rutas (routers) y se define la lógica de inicio.
|
|
|
+* **config/**: Contiene la configuración centralizada.
|
|
|
+ * settings.py: Carga las variables de entorno (.env) usando Pydantic.
|
|
|
+ * messages.py: Mensajes de sistema para el chatbot.
|
|
|
+ * mails.py: Plantillas para correos de notificación.
|
|
|
+* **models/**: Define los esquemas de datos (Pydantic) usados en la API para validación y serialización (chat.py, items.py, user.py, sales.py).
|
|
|
+* **routes/**: Define los *routers* de FastAPI (endpoints de la API). Cada archivo agrupa endpoints por funcionalidad (chat.py, orders.py, products.py, users.py, sales.py).
|
|
|
+ * static.py: Sirve los archivos del frontend (public/).
|
|
|
+* **services/**: Contiene la lógica de negocio principal, desacoplada de las rutas.
|
|
|
+ * data\_service.py: Gestiona la carga de datos (productos, usuarios) desde archivos JSON.
|
|
|
+ * openai\_service/: Lógica para interactuar con la API de OpenAI, incluyendo la gestión de herramientas (tools).
|
|
|
+ * fudo\_service.py: Lógica para la integración con el POS Fudo.
|
|
|
+ * print\_service.py: Lógica para interactuar con la impresora térmica USB.
|
|
|
+ * email\_service.py: Envío de notificaciones por email.
|
|
|
+ * recovery\_service.py: Lógica para recuperación de acceso.
|
|
|
+* **auth/**: Lógica de seguridad.
|
|
|
+ * security.py: Generación y validación de tokens (anti-abuso, sesiones).
|
|
|
+* **middleware/**: Middlewares personalizados de FastAPI.
|
|
|
+ * no\_cache.py: Asegura que las respuestas de la API no se almacenen en caché.
|
|
|
+ * in\_time.py: (Posiblemente) valida si las operaciones se realizan en horario comercial.
|
|
|
+* **utils/**: Funciones de utilidad reutilizables.
|
|
|
+ * responses.py: Constructores de respuestas HTTP estandarizadas.
|
|
|
+ * rut.py: Utilidades para validación de RUT.
|
|
|
+* **data/**: Almacenamiento de datos estáticos.
|
|
|
+ * products.json: Catálogo de productos y cervezas.
|
|
|
+ * llm\_data.json: Base de conocimientos específica para el asistente de IA.
|
|
|
+* **public/**: Contiene el frontend (cliente web estático) en Vanilla JS, HTML y CSS.
|
|
|
+* **logs/**: Directorio donde se escriben los logs de la aplicación (ej. app.log).
|
|
|
+
|
|
|
+## **🤖 Características Principales**
|
|
|
+
|
|
|
+### **Asistente de IA (Camilo Klein)**
|
|
|
+
|
|
|
+* Integración con **OpenAI GPT-4o-mini** (services/openai\_service).
|
|
|
+* Base de conocimientos personalizada (data/llm\_data.json).
|
|
|
+* Sistema de "tools" de OpenAI para interactuar con el catálogo de productos.
|
|
|
+* Sistema de tokens anti-abuso para proteger el endpoint (auth/security.py).
|
|
|
+
|
|
|
+### **Gestión de Pedidos y Productos**
|
|
|
+
|
|
|
+* Catálogo de productos cargado desde products.json (services/data\_service.py).
|
|
|
+* Carrito de compras gestionado en el frontend (public/main/js/utils/shoppingCart.js).
|
|
|
+* Procesamiento de pedidos (routes/orders.py).
|
|
|
+
|
|
|
+### **Integraciones de Hardware y Externas**
|
|
|
+
|
|
|
+* **Impresora Térmica USB**: El print\_service.py se encarga de formatear y enviar los pedidos a la impresora.
|
|
|
+* **Fudo POS**: Sincronización de pedidos con el sistema de punto de venta (services/fudo\_service.py).
|
|
|
+* **Email**: Notificaciones de error o críticas del sistema (services/email\_service.py).
|
|
|
+
|
|
|
+### **Seguridad**
|
|
|
+
|
|
|
+* **Tokens anti-abuso**: Se genera un token al iniciar el chat (/api/chat/init-chat) que debe usarse para todas las peticiones de chat (/api/chat/completions).
|
|
|
+* **Validación de Sesión**: Protección de endpoints sensibles.
|
|
|
+* **Variables de Entorno**: No hay claves quemadas en el código; todo se gestiona vía config/settings.py.
|
|
|
+
|
|
|
+## **🔌 API Endpoints (Resumen)**
|
|
|
+
|
|
|
+Consulta los archivos en routes/ para ver la definición completa, incluyendo los modelos de request y response.
|
|
|
+
|
|
|
+### **Chat (Asistente IA)**
|
|
|
+
|
|
|
+* GET /api/chat/init-chat: Inicia una sesión de chat y obtiene un token anti-abuso.
|
|
|
+* POST /api/chat/completions: Envía un mensaje al asistente (requiere token).
|
|
|
+
|
|
|
+### **Productos**
|
|
|
+
|
|
|
+* GET /api/get\_products: Obtiene el catálogo completo de productos.
|
|
|
+
|
|
|
+### **Pedidos**
|
|
|
+
|
|
|
+* POST /api/printer/order: Recibe una orden, la procesa, la imprime y la envía a Fudo.
|
|
|
+
|
|
|
+### **Usuarios**
|
|
|
+
|
|
|
+* POST /api/existsUser: Valida la existencia de un código de usuario/mesa.
|
|
|
+* *(Otros endpoints de autenticación y registro en routes/users.py)*.
|
|
|
+
|
|
|
+### **Ventas (Sales)**
|
|
|
+
|
|
|
+* *(Endpoints definidos en routes/sales.py para gestionar ventas)*.
|
|
|
+
|
|
|
+### **Frontend**
|
|
|
+
|
|
|
+* GET /: Sirve el index.html principal (public/main/index.html).
|
|
|
+* GET /register: Sirve la página de registro.
|
|
|
+* GET /verify: Sirve la página de verificación.
|
|
|
+* *(Rutas estáticas para js, css, assets)*.
|
|
|
+
|
|
|
+## **🛠️ Tecnologías Utilizadas**
|
|
|
+
|
|
|
+* **Backend**: FastAPI, Python 3.9+
|
|
|
+* **Servidor ASGI**: Uvicorn, Gunicorn
|
|
|
+* **Frontend**: Vanilla JavaScript (ES6+), Tailwind CSS, HTML5
|
|
|
+* **Base de Datos (Estado/Caché)**: Redis
|
|
|
+* **Base de Datos (Datos Estáticos)**: Archivos JSON
|
|
|
+* **IA**: OpenAI API (GPT-4o-mini)
|
|
|
+* **Integraciones**: Fudo POS (API REST), Impresora Térmica (USB), SMTP
|
|
|
+
|
|
|
+## **📝 Logging y Monitoreo**
|
|
|
+
|
|
|
+* El logging está configurado en config/settings.py.
|
|
|
+* Los logs de la aplicación se escriben por defecto en logs/app.log.
|
|
|
+* Se registran eventos críticos como errores de impresión, fallos en la API de Fudo y errores inesperados del servidor.
|