From abc620838ccdb22842579461b9f5c82ac17206e6 Mon Sep 17 00:00:00 2001 From: Mireya Cueto Garrido Date: Wed, 13 May 2026 13:48:42 +0200 Subject: [PATCH] Cambio en el .env y docker compose --- README.md | 113 ++++++++++++++++++++++++++- .env => backend/.env | 0 .env.example => backend/.env.example | 0 docker-compose.yml | 2 +- 4 files changed, 112 insertions(+), 3 deletions(-) rename .env => backend/.env (100%) rename .env.example => backend/.env.example (100%) diff --git a/README.md b/README.md index 3e8fc47..9ac9cb4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,111 @@ -# moodle-exam-generator -Generador avanzado de exámenes con IA, capaz de crear cuestionarios personalizados, configurar tipos de preguntas y exportar automáticamente el resultado en formato Moodle XML listo para importar. Integración completa con prompts para generar contenido educativo de forma dinámica. +# GenExamenes IA + +Backend para generar exámenes con IA, procesar la salida de un LLM y exportar preguntas a Moodle XML. + +El proyecto está centrado en backend. La carpeta `frontend` se mantiene vacía a nivel de aplicación, aunque existe un servicio en Docker Compose para reservar el despliegue futuro. + +## Stack + +- FastAPI +- PostgreSQL +- SQLAlchemy +- Cliente LLM compatible con OpenAI Chat Completions +- Docker Compose con servicios `backend`, `frontend` y `db` + +## Puesta en Marcha + +Copia el ejemplo de variables dentro de la carpeta del backend: + +```bash +cp backend/.env.example backend/.env +``` + +Después levanta los servicios: + +```bash +docker compose up --build +``` + +La API queda disponible en: + +```text +http://localhost:8000 +``` + +## Configuración + +El archivo de entorno debe estar en `backend/.env`. + +Variables principales: + +- `API_KEY`: clave obligatoria para consumir las rutas protegidas. +- `DATABASE_URL`: conexión PostgreSQL usada por el backend. +- `LLM_API_KEY`: clave del proveedor LLM. +- `LLM_BASE_URL`: endpoint compatible con OpenAI. +- `LLM_MODEL`: modelo usado para generar preguntas. +- `ALLOWED_ORIGINS`: orígenes permitidos por CORS. + +Todas las rutas bajo `/exam` requieren la cabecera: + +```http +X-API-Key: change-me-in-production +``` + +## Flujo de Usuario + +1. Crear una plantilla de examen. +2. Generar un prompt guiado para el LLM. +3. Generar preguntas automáticamente con el LLM o parsear una salida externa en JSON/TXT. +4. Guardar las preguntas validadas en PostgreSQL. +5. Exportar el examen a Moodle XML, TXT o JSON. + +## Endpoints + +`GET /health` + +Comprueba que la API está levantada. + +`POST /exam/templates` + +Crea una plantilla con materia, nivel educativo, tipos de pregunta, puntuación, penalización y dificultad. + +`GET /exam/templates` + +Lista las plantillas creadas. + +`GET /exam/templates/{template_id}` + +Obtiene una plantilla concreta. + +`POST /exam/prompts/{template_id}` + +Genera un prompt estructurado para IA. + +`POST /exam/generate` + +Llama al LLM configurado, parsea la respuesta y guarda las preguntas. + +`POST /exam/parse` + +Procesa una salida externa de IA en formato `json` o `txt`. + +`GET /exam/export/xml/{template_id}` + +Exporta las preguntas en Moodle XML. + +`GET /exam/export/txt/{template_id}` + +Exporta las preguntas en texto plano. + +`GET /exam/export/json/{template_id}` + +Exporta las preguntas en JSON. + +## Seguridad + +- Autenticación por API key. +- Rate limiting por cliente. +- Límite de tamaño de petición. +- Validación de entrada con Pydantic. +- Manejo uniforme de errores HTTP. +- Sanitización básica de prompts y respuestas antes de persistir/exportar. diff --git a/.env b/backend/.env similarity index 100% rename from .env rename to backend/.env diff --git a/.env.example b/backend/.env.example similarity index 100% rename from .env.example rename to backend/.env.example diff --git a/docker-compose.yml b/docker-compose.yml index 2a0b355..1d61571 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: build: context: ./backend env_file: - - .env + - ./backend/.env environment: DATABASE_URL: postgresql+psycopg://genexamenes:genexamenes@db:5432/genexamenes ports: