✨ Características: - 45 ejercicios universitarios (Basic → Advanced) - Renderizado LaTeX profesional - IA generativa (Z.ai/DashScope) - Docker 9 servicios - Tests 123/123 pasando - Seguridad enterprise (JWT, XSS, Rate limiting) 🐳 Infraestructura: - Next.js 14 + Node.js 20 - PostgreSQL 15 + Redis 7 - Docker Compose completo - Nginx + SSL ready 📚 Documentación: - 5 informes técnicos completos - README profesional - Scripts de deployment automatizados Estado: Producción lista ✅
4.7 KiB
4.7 KiB
TAREAS DE REMEDIACIÓN PARA KIMI 🛠️
(Math2 Platform)
Este documento contiene la lista detallada de tareas que resultan del análisis profundo del código fuente (TypeScript type check y Unit/Integration tests).
🛑 BUGS CRÍTICOS (Prioridad Máxima - Resolver errores de Tests y Build)
1. Corregir Prisma Schema (@updatedAt faltante)
- El Problema: El 80% de los errores de compilación de TypeScript (TS) y los 9 tests que fallan en el backend se deben a un problema crítico en
/backend/prisma/schema.prisma. Múltiples modelos (Progress,Notification,Achievement,UserAchievement,Exercise,modules,processed_pdfs,topics) tienen un campoupdatedAt DateTimepero carecen de la directiva@updatedAt. Esto fuerza a pasar este timestamp manualmente en cada.create()y.upsert(), lo que el código actual no hace, causando decenas de errores de type check y tests fallidos enexercise.service.tsy otros. - La Solución (Backend):
- Agregar
@updatedAta todos losupdatedAt DateTimeen el schema. - Opcionalmente correr una migración y
npx prisma generate.
- Agregar
2. Arreglar Nombres Inconsistentes en Consultas Prisma
- El Problema: Muchas consultas
.include,.wherey lógicas usan nombres en singular para relaciones que Prisma cambió a plural o snake_case. - La Solución (Backend):
notification.service.ts: EnNotification.create(), usaruser_iden vez deuserId.exercise.repository.ts,progress.service.ts,badge.awarder.ts,position.calculator.ts: Cambiar objetosinclude: { exercise: true }ainclude: { exercises: true }. Igual paramodule->modulesytopic->topics. Y en queries buscar los de plural.pdf-processor.worker.ts: Variables comofileNamedeben serfile_nameen el payload de Prisma.
3. Rutas y Tipos Rotos del Repositorio
- El Problema:
/backend/src/repositories/exercise.repository.tsestá buscando importar desde../interfaces/exercise.repository.interfacey../../core/typesque ya no existen. - La Solución: Limpiar y actualizar la ruta de estas importaciones hacia
shared/types/ocore/dependiendo de la nueva estructura tras las limpiezas previas.
✨ MEJORAS DE CÓDIGO (Nice to Have & Optimizaciones)
1. Limpieza de Restricciones Estrictas de TypeScript (exactOptionalPropertyTypes: true)
- Problema: En
notification.service.tsy en el cliente de Telegram, TypeScript se queja (Types of property 'errorMessage' are incompatible) de que estamos pasando un tipo estricto= undefinedmientras el tipado de Prisma no lo permite. - Solución: Omitir la llave completamente (destructuring,
omito validaciones condicionales sin pasarundefined).
2. Correcciones de Tipado JSON vs Array
- Problema: En
system-config.service.ts, existen warnings donde se trata unJsonValuegenérico devuelto por Prisma (changeHistory) asumiendo que es unChangeRecord[]. - Solución: Agregar Type Guards o una aserción
as unknown as ChangeRecord[]para suprimir el error, o parsear / limpiar de forma segura el dato de la DB.
3. Eliminar "Dead Code" (Código Muerto)
- Problema: El Linter muestra código obsoleto. Cerca de 15 variables "is declared but never used".
- Solución: Limpiar en
notification.service.ts(ej:generateExerciseCompletionMessage), enprogress.service.ts(ej:ProgressMetrics), entelegram/templates/y variables en los calculadores de ranking.
4. Corrección de Parámetros de Fechas
- Problema: En
streak.calculator.ts, enviarundefinedcomo parámetro anew Date()y operaciones que devuelvenDate | undefinedrompe firmas que esperanDate | null. - Solución: Cambiar el return de estas funciones de uniones con
undefinedanull, o normalizar siempre a una instanciaDate().
🚀 PENDIENTES FUNCIONALES & PRODUCCIÓN
1. Poblar Base de Datos - seed.ts (Para Evitar Dashboard Vacío)
- Como se documenta en el antiguo
glm8-empty-dashboard.md, si no existen Módulos en el sistema, el usuario se topa con la pantalla "Felicidades has completado todo". - Acción: Asegúrate que
backend/prisma/seed.tsinserta por defecto 3 módulos (FUNDAMENTOS,SISTEMAS, etc.), múltiples temas y al menos cinco ejercicios por módulo conisPublished: true.
2. Sincronización Real de Racha en el Dashboard
- En el frontend (
/frontend/src/app/(dashboard)/dashboard/page.tsx), las estadísticas de "Racha Actual" se inicializan en estado inicial, ignorando la response verdadera de/api/progress. - Mapear correctamente el atributo
currentStreaky demás stats raiz sacando provecho a la response global.
¡Hecho! Éxitos Kimi. Lee esto de arriba a abajo y el proyecto volará validando 100%.