feat: fase 4 — overhaul, docker, seguridad, métodos europeos
- Eliminada ruta duplicada /sebastian/sumas (código muerto) - Removido topic 'sumas' del engine (reemplazado por 'matematicas') - Creado docker-compose.yml (PostgreSQL + app, 1 comando install) - Dockerfile: copiado prisma CLI al runner stage para db push - APIs debug protegidas: 403 en producción (reset, state, seed) - Audit métodos europeos: 24 archivos corregidos al 100% - Montessori: matemática Francesca + Sebastián - Decroly: lectura, ortografía, historia, geografía, banderas - Borel-Maisonny: lectura inicial Isabella (ya existía) - Freinet: expresión escrita Sebastián (ya existía) - Validación prerequisitos: 0 rotos en contenido nuevo (157 ejercicios) - INSTALL.md: guía completa de instalación - fase4.md: documentación del overhaul - E2E: 2 tests corregidos, 61/61 pasan - TypeScript: exit 0, Build: exit 0
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
# FASE 4 — Overhaul, Bug Fixes y Hardening Final
|
||||
|
||||
> **Objetivo**: Code review completo, eliminación de código muerto, seguridad, Docker para instalación, y verificación de métodos europeos.
|
||||
|
||||
---
|
||||
|
||||
## 0. Resumen Ejecutivo
|
||||
|
||||
| Categoría | Ítems |
|
||||
|-----------|-------|
|
||||
| Código muerto eliminado | 1 ruta duplicada + 1 topic legacy en engine |
|
||||
| Vulnerabilidades corregidas | 3 APIs debug sin auth → bloqueadas en producción |
|
||||
| Docker para instalación | docker-compose.yml + Dockerfile con prisma CLI |
|
||||
| Métodos europeos auditados | 24 archivos corregidos (100% cobertura) |
|
||||
| Prerequisitos validados | 157 ejercicios nuevos verificados (0 rotos) |
|
||||
| E2E tests | 61 pasan (2 corregidos tras eliminar ruta) |
|
||||
| Build + TypeScript | ✅ Ambos pasan |
|
||||
|
||||
---
|
||||
|
||||
## 1. Bug Fixes
|
||||
|
||||
### 1.1 Ruta duplicada /sebastian/sumas
|
||||
|
||||
**Problema**: Existían dos rutas que apuntaban a la misma carpeta del currículum:
|
||||
- `/sebastian/sumas` (legacy)
|
||||
- `/sebastian/matematicas` (actual)
|
||||
|
||||
La home page de Sebastián ya usaba `matematicas`, pero `sumas` seguía como código muerto.
|
||||
|
||||
**Fix**:
|
||||
- Eliminada `app/sebastian/sumas/page.tsx`
|
||||
- Removido topic `sumas` del engine (`PROFILE_CURRICULA`)
|
||||
- Actualizados 2 tests E2E que referenciaban la ruta eliminada
|
||||
|
||||
### 1.2 APIs de debug sin protección
|
||||
|
||||
**Problema**: Los endpoints `/api/debug/reset`, `/api/debug/state`, `/api/debug/seed` eran accesibles sin autenticación en cualquier entorno. Cualquiera podía:
|
||||
- Borrar todo el progreso de un child (`reset`)
|
||||
- Leer datos privados (`state`)
|
||||
- Inyectar datos falsos (`seed`)
|
||||
|
||||
**Fix**: Guard de `NODE_ENV` al inicio de cada handler:
|
||||
|
||||
```typescript
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
return NextResponse.json({ error: "Not available in production" }, { status: 403 })
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Docker para Instalación
|
||||
|
||||
### 2.1 docker-compose.yml (NUEVO)
|
||||
|
||||
Servicio `db` (PostgreSQL 16-alpine) + servicio `app` (build desde Dockerfile).
|
||||
|
||||
```yaml
|
||||
services:
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U edueasy -d edueasy"]
|
||||
app:
|
||||
build: .
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
command: sh -c "npx prisma db push --skip-generate && node server.js"
|
||||
```
|
||||
|
||||
Instalación: `docker compose up -d` → app en `http://localhost:3000`.
|
||||
|
||||
### 2.2 Dockerfile actualizado
|
||||
|
||||
Copiado `node_modules/prisma` (CLI) y `node_modules/@prisma` (client) al runner stage para que `prisma db push` funcione en el contenedor.
|
||||
|
||||
---
|
||||
|
||||
## 3. Audit de Métodos Europeos
|
||||
|
||||
### 3.1 Problema
|
||||
|
||||
24 archivos de currículum NO mencionaban ningún método europeo en su `functionalContext`.
|
||||
|
||||
### 3.2 Fix
|
||||
|
||||
Añadida referencia al método correspondiente en cada archivo:
|
||||
|
||||
| Método | Aplicación | Archivos |
|
||||
|--------|------------|----------|
|
||||
| **Montessori** | Matemática (Francesca + Sebastián) | 6 archivos |
|
||||
| **Decroly** | Lectura, ortografía, historia, geografía, banderas | 18 archivos |
|
||||
| **Borel-Maisonny** | Lectura inicial (Isabella, ya existía) | 0 cambios |
|
||||
| **Freinet** | Expresión escrita (Sebastián lectura, ya existía) | 0 cambios |
|
||||
|
||||
**Resultado**: 100% de archivos con método europeo referenciado.
|
||||
|
||||
---
|
||||
|
||||
## 4. Validación de Prerequisitos
|
||||
|
||||
### 4.1 Script de validación
|
||||
|
||||
Creado script que recorre todos los archivos de currículum y verifica:
|
||||
- **0 self-references** (ejercicio que se requiere a sí mismo)
|
||||
- **0 prereqs faltantes** en contenido nuevo (Francesca + Sebastián)
|
||||
|
||||
### 4.2 Resultado
|
||||
|
||||
| Check | Contenido nuevo (Francesca + Sebastián) |
|
||||
|-------|----------------------------------------|
|
||||
| Self-references | 0 ✅ |
|
||||
| Prereqs faltantes | 0 ✅ |
|
||||
| IDs verificados | 157 |
|
||||
|
||||
Los 24 prereqs "faltantes" en Isabella son false positives del parser (template literals no resueltos por regex).
|
||||
|
||||
---
|
||||
|
||||
## 5. Documentación
|
||||
|
||||
### 5.1 INSTALL.md (NUEVO)
|
||||
|
||||
Guía de instalación completa:
|
||||
- Docker compose (1 comando)
|
||||
- Instalación manual (Node + PostgreSQL + espeak-ng)
|
||||
- Descripción de perfiles y materias
|
||||
- APIs de debug documentadas
|
||||
- Estructura del proyecto
|
||||
|
||||
---
|
||||
|
||||
## 6. Estado Final
|
||||
|
||||
| Criterio | Estado |
|
||||
|----------|--------|
|
||||
| TypeScript compila | ✅ `npx tsc --noEmit` exit 0 |
|
||||
| Build Next.js | ✅ `npm run build` exit 0 |
|
||||
| E2E tests | ✅ 61/61 pasan |
|
||||
| Docker | ✅ `docker compose up` listo |
|
||||
| Métodos europeos | ✅ 100% cobertura |
|
||||
| Seguridad debug APIs | ✅ Bloqueadas en producción |
|
||||
| Código muerto | ✅ Eliminado |
|
||||
| Prerequisitos | ✅ Validados (0 rotos en nuevo) |
|
||||
Reference in New Issue
Block a user