# EduPlay Backend — Guía de configuración

## Prerrequisitos
- Python 3.11+
- MySQL 8.0+ (producción) o SQLite (desarrollo)
- Redis (opcional, para WebSockets escalables en producción)

## Instalación local

```bash
# 1. Clonar y crear entorno virtual
git clone <repo>
cd eduplay_backend
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 2. Instalar dependencias
pip install -r requirements-dev.txt

# 3. Variables de entorno
cp .env.example .env
# Editar .env con tus valores

# 4. Generar clave de cifrado (guardar en .env como ENCRYPTION_KEY)
python -c "from shared.utils.encryption import EncryptionService; print(EncryptionService.generate_key())"

# 5. Crear base de datos (SQLite en dev, automático)
python manage.py migrate

# 6. Cargar datos iniciales (insignias)
python manage.py loaddata gamification/fixtures/insignias.json

# 7. Crear superusuario admin
python manage.py createsuperuser

# 8. Iniciar servidor de desarrollo
python manage.py runserver
```

## Variables de entorno requeridas

| Variable | Descripción | Ejemplo |
|---|---|---|
| SECRET_KEY | Clave secreta Django | 50+ chars random |
| JWT_SECRET_KEY | Clave para firmar JWT | 50+ chars random |
| ENCRYPTION_KEY | Clave AES-256 en base64 | Generada con el script |
| DB_NAME | Nombre BD MySQL | eduplay_db |
| DB_USER | Usuario MySQL | eduplay_user |
| DB_PASSWORD | Contraseña MySQL | ... |
| CORS_ORIGINS | Orígenes React | http://localhost:5173 |

## URLs de la API

```
POST   /api/v1/auth/login/
POST   /api/v1/auth/refresh/
POST   /api/v1/auth/logout/
POST   /api/v1/auth/register/docente/
POST   /api/v1/auth/register/alumno/
GET    /api/v1/users/me/
GET    /api/v1/users/docentes/
POST   /api/v1/users/docentes/{id}/approve/
POST   /api/v1/users/docentes/{id}/reject/
GET    /api/v1/users/alumnos/
POST   /api/v1/users/tokens/registration/
GET    /api/v1/academic/asignaturas/
POST   /api/v1/academic/asignaturas/
POST   /api/v1/academic/secciones/{id}/generar-codigo/
POST   /api/v1/academic/unirse/
GET    /api/v1/questions/preguntas/
POST   /api/v1/questions/preguntas/importar/
GET    /api/v1/sessions/sesiones/
POST   /api/v1/sessions/sesiones/{id}/abrir/
POST   /api/v1/sessions/sesiones/{id}/activar-pregunta/
POST   /api/v1/sessions/responder/
GET    /api/v1/gamification/ranking/
GET    /api/v1/gamification/insignias/
POST   /api/v1/gamification/canjear/
GET    /api/v1/analytics/mapa-calor/
GET    /api/v1/evaluation/notas/exportar-excel/
GET    /api/v1/security/audit-logs/
ws://localhost:8000/ws/sesiones/{sesion_id}/
```

## Despliegue en cPanel

1. Subir código al servidor (excluir .env, venv, __pycache__)
2. Crear entorno virtual en cPanel Python Manager
3. Configurar variables de entorno en .env
4. Ejecutar migraciones: `python manage.py migrate --settings=config.settings.production`
5. Cargar fixtures: `python manage.py loaddata gamification/fixtures/insignias.json`
6. Colectar estáticos: `python manage.py collectstatic`
7. Configurar passenger_wsgi.py como punto de entrada
8. Para WebSockets: levantar Daphne como proceso cron/daemon

## WebSockets en producción sin Redis

El `InMemoryChannelLayer` funciona en un solo proceso.
Si Passenger levanta múltiples workers, los WebSockets no funcionarán entre procesos.
Solución: configurar Redis como channel layer (ver REDIS_URL en .env).
