- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.9 KiB
DELEGACION: Backend-Agent - Sprint P2
Proyecto: GAMILIT Fecha: 2025-12-05 De: Requirements-Analyst Para: Backend-Agent Sprint: P2-A, P2-B, P2-C
CONTEXTO
El Sprint P1 ha sido completado exitosamente. El proyecto ahora esta al 75% de completitud. Se requiere que Backend-Agent complete las siguientes tareas para cerrar los gaps criticos y preparar el sistema para produccion.
PREREQUISITOS COMPLETADOS
- Sprint P1 - Sistema de amigos implementado
- Sprint P1 - ML Coins multiplicadores implementados
- Sprint P1 - Mission Templates implementados
- Sprint P1 - CRON notificaciones implementado
- NOTIF-001 - Email service integrado
TAREAS ASIGNADAS
Sprint P2-A (Prioridad P0)
BE-P2-003: Verificar CRON Misiones en Produccion
Story: US-P2-004
SP: 2
Archivo: apps/backend/src/modules/gamification/services/missions-cron.service.ts
Acciones:
- Verificar que @Cron decoradores estan descomentados
- Agregar logging detallado para cada ejecucion
- Configurar alertas si CRON falla
- Crear endpoint GET /admin/cron/status
Criterios de Aceptacion:
- CRON diario ejecuta a medianoche UTC
- CRON semanal ejecuta domingos a medianoche
- Logs registran: usuarios procesados, misiones creadas, duracion
BE-P2-007: Implementar Calculo Real de Rachas
Story: US-P2-005
SP: 5
Archivo: apps/backend/src/modules/gamification/services/missions.service.ts
Linea actual: 693
Acciones:
- Reemplazar TODO con implementacion real
- Crear query para obtener fechas con actividad
- Calcular currentStreak (dias consecutivos hasta hoy)
- Calcular longestStreak (record historico)
- Actualizar campo longest_streak en user_stats
Algoritmo:
async getStreakStats(userId: string): Promise<StreakStats> {
const activityDates = await this.getActivityDates(userId);
const today = startOfDay(new Date());
let currentStreak = 0;
let checkDate = today;
while (activityDates.has(formatDate(checkDate))) {
currentStreak++;
checkDate = subDays(checkDate, 1);
}
const longestStreak = this.calculateLongestStreak(activityDates);
return { currentStreak, longestStreak, totalDaysActive: activityDates.size };
}
Sprint P2-B (Prioridad P1)
BE-P2-008: Notificaciones Push/Email para Docentes
Story: US-TEACHER-P2-005
SP: 3
Modulo: notifications
Acciones:
- Crear evento 'student.exercise.submitted' en ManualReviewService
- Enviar notificacion push al docente cuando estudiante envia M4-M5
- Opcionalmente enviar email si docente lo tiene habilitado
- Incluir: nombre estudiante, tipo ejercicio, enlace directo a revision
BE-ADMIN-004-007: Persistir Reports en BD
Story: US-ADMIN-P2-004 SP: 5
Acciones:
- Crear tabla
admin_dashboard.admin_reports(DDL adjunto) - Modificar ReportsService para guardar en BD
- Implementar storage de archivos (local o S3)
- Crear CRON de limpieza cada 30 dias
DDL:
CREATE TABLE admin_dashboard.admin_reports (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
type VARCHAR(50) NOT NULL,
name VARCHAR(255) NOT NULL,
parameters JSONB,
file_path VARCHAR(500),
file_size INTEGER,
status VARCHAR(20) DEFAULT 'pending',
created_by UUID REFERENCES auth_management.users(id),
created_at TIMESTAMP DEFAULT NOW(),
expires_at TIMESTAMP DEFAULT NOW() + INTERVAL '30 days'
);
CREATE INDEX idx_admin_reports_created_by ON admin_dashboard.admin_reports(created_by);
CREATE INDEX idx_admin_reports_expires_at ON admin_dashboard.admin_reports(expires_at);
BE-ADMIN-001-003: Feature Flags Controller (si no existe)
Story: US-ADMIN-P2-003 SP: 5
Acciones:
- Verificar si FeatureFlagsController existe
- Si no existe, crear:
- FeatureFlagsController con CRUD
- FeatureFlagsService con logica de rollout
- Endpoints: GET/POST/PUT/DELETE /admin/feature-flags
Sprint P2-C (Prioridad P2)
BE-P2-009: Validacion 150 Palabras Diario M5
Story: US-M5-P2-001
SP: 3
Archivo: apps/backend/src/modules/educational/services/exercises.service.ts
Acciones:
- Agregar validacion en submit de diario_multimedia
- Contar palabras del contenido
- Rechazar si < 150 palabras con mensaje claro
BE-P2-010: Misiones Grupales Gremios
Story: US-GAM-P2-002 SP: 8
Acciones:
- Crear tabla guild_missions (similar a classroom_missions)
- Agregar logica de progreso colectivo
- Distribuir recompensas a todos los miembros
- Crear endpoints para gremio leader
RESUMEN DE TAREAS
| ID | Tarea | SP | Sprint | Dependencias |
|---|---|---|---|---|
| BE-P2-003 | CRON produccion | 2 | P2-A | Ninguna |
| BE-P2-007 | Calculo rachas | 5 | P2-A | Ninguna |
| BE-P2-008 | Notif docentes | 3 | P2-B | Email service OK |
| BE-ADMIN-004-007 | Persistir reports | 5 | P2-B | Ninguna |
| BE-ADMIN-001-003 | Feature flags | 5 | P2-B | Ninguna |
| BE-P2-009 | Validacion M5 | 3 | P2-C | Ninguna |
| BE-P2-010 | Misiones gremios | 8 | P2-C | Teams base OK |
Total Backend P2: 31 SP
ARCHIVOS DE REFERENCIA
- Analisis completo:
orchestration/agentes/requirements-analyst/ANALISIS-ALCANCES-P2-POST-SPRINT-P1-2025-12-05.md - Historias P0:
orchestration/agentes/requirements-analyst/historias-usuario/US-P2-CRITICAS.md - Historias Admin:
orchestration/agentes/requirements-analyst/historias-usuario/US-P2-ADMIN.md - Traza:
orchestration/trazas/TRAZA-REQUERIMIENTOS.md
CRITERIOS DE ACEPTACION GENERALES
- Codigo con cobertura de tests >= 50% para nuevas funcionalidades
- Documentacion Swagger actualizada
- Sin errores en npm run lint
- Build exitoso
- Logging apropiado para debugging
Generado por: Requirements-Analyst Fecha: 2025-12-05 Revision: Despues de Sprint P2-A