Files
renato97 07929b6c60 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
2026-07-25 22:34:05 -03:00

4.4 KiB

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:

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).

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)