Gamilit: - Backend: Teacher services, assignments, gamification, exercise submissions - Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring - Database: DDL functions, seeds for dev/prod, auth/gamification schemas - Docs: Architecture, features, guides cleanup and reorganization Core/Orchestration: - New workspace directives index - Documentation directive Trading-platform: - Database seeds and inventory updates - Tech leader validation report 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.9 KiB
PLAN DE ANÁLISIS - FLUJO DE CREACIÓN DE USUARIOS
Tech-Leader: Claude Opus 4.5 Proyecto: GAMILIT Fecha: 2025-12-15 Tarea: Análisis detallado y adaptación del flujo de creación de usuarios
1. RESUMEN EJECUTIVO
Objetivo Principal
Analizar y adaptar el flujo de creación de usuarios para implementar:
- Clase genérica "por asignar" para nuevos estudiantes
- Institución default para organización inicial
- Corrección del registro de último ingreso en admin/users
Hallazgos Iniciales
| Componente | Estado | Observación |
|---|---|---|
| Classroom Default | ✅ EXISTE | UUID: 00000000-0000-0000-0000-000000000001, code: DEFAULT |
| School Default | ❌ NO EXISTE | Solo hay escuelas demo, ninguna marcada como default |
Función assign_default_classroom |
✅ EXISTE | Funciona correctamente |
| Trigger asignación | ✅ EXISTE | trg_assign_default_classroom AFTER INSERT en profiles |
| AuthService.register | ❌ NO IMPLEMENTADO | Método lanza excepción |
last_login actualización |
⚠️ PARCIAL | Campos existen pero no se actualizan |
| Institución Default | ❌ NO EXISTE | No hay concepto de institución default |
2. ARQUITECTURA ACTUAL
2.1 Flujo de Registro de Usuario (Actual)
┌─────────────────────────────────────────────────────────────────┐
│ FLUJO ACTUAL (INCOMPLETO) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Frontend envía datos de registro │
│ ↓ │
│ 2. AuthService.register() → ❌ throws Error │
│ (NO IMPLEMENTADO) │
│ ↓ │
│ 3. Si se creara el profile: │
│ • trg_set_default_tenant (BEFORE INSERT) │
│ • INSERT profile │
│ • trg_initialize_user_stats (AFTER INSERT) │
│ • trg_assign_default_classroom (AFTER INSERT) ← ✅ EXISTE │
│ │
└─────────────────────────────────────────────────────────────────┘
2.2 Tablas Involucradas
| Tabla | Schema | Propósito |
|---|---|---|
auth.users |
auth | Credenciales, last_sign_in_at |
auth_management.profiles |
auth_management | Perfil de usuario, role, school_id |
auth_management.tenants |
auth_management | Multi-tenancy |
social_features.schools |
social_features | Instituciones/Escuelas |
social_features.classrooms |
social_features | Aulas |
social_features.classroom_members |
social_features | Membresía estudiante-aula |
2.3 Usuarios Default Existentes (Seeds)
| UUID | Rol | Propósito | |
|---|---|---|---|
admin@gamilit.com |
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa |
super_admin | Admin principal |
teacher@gamilit.com |
bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb |
admin_teacher | Maestro default |
teacher2@gamilit.com |
- | admin_teacher | Maestro secundario |
student@gamilit.com |
cccccccc-cccc-cccc-cccc-cccccccccccc |
student | Estudiante demo 1 |
2.4 Classroom Default (Existente)
id: '00000000-0000-0000-0000-000000000001'
name: 'Sin Asignar - Aula Default'
code: 'DEFAULT'
school_id: '50000000-0000-0000-0000-000000000001' # Marie Curie
teacher_id: 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb' # teacher@gamilit.com
metadata:
is_default: true
system_classroom: true
auto_assignment: true
3. PLAN DE ANÁLISIS (FASE 2)
3.1 Componentes a Analizar
A. Database Layer
- DDL de
social_features.schools- verificar campois_default - DDL de
social_features.classrooms- validar metadata schema - Seeds de escuelas - verificar si hay escuela default
- Función
gamilit.assign_default_classroom()- revisar lógica - Triggers de inicialización - orden de ejecución
B. Backend Layer
AuthService.register()- estado de implementaciónProfilesService- métodos de creaciónUsersService- si existe- Endpoints de
/auth/register - Actualización de
last_sign_in_at
C. Frontend Layer
AdminUsersPage.tsx- mostrar último ingresouseUserManagement.ts- hook de gestión- API types para SystemUser
- Formato de fechas para
lastLogin
D. API Contracts
- Response de GET /admin/users
- Mapeo de campos
last_sign_in_at→lastLogin
4. ISSUES IDENTIFICADOS
4.1 P0 - Críticos
| ID | Issue | Ubicación | Impacto |
|---|---|---|---|
| P0-001 | AuthService.register() no implementado |
auth.service.ts:48 |
Bloquea registro de nuevos usuarios |
| P0-002 | last_sign_in_at no se actualiza |
Backend auth | Admin ve "Nunca" en último acceso |
| P0-003 | No existe School Default | Seeds | Nuevos usuarios no tienen school_id |
4.2 P1 - Importantes
| ID | Issue | Ubicación | Impacto |
|---|---|---|---|
| P1-001 | Campo school_id en profiles es opcional |
profiles.sql:34 |
Usuarios sin escuela asignada |
| P1-002 | No hay institución default para admin | Arquitectura | Admin sin escuela asociada |
| P1-003 | Mapping lastLogin incorrecto |
Frontend types | UI muestra "Nunca" siempre |
4.3 P2 - Mejoras
| ID | Issue | Ubicación | Impacto |
|---|---|---|---|
| P2-001 | Reasignación de estudiantes entre aulas | Admin UI | UX mejorable |
| P2-002 | Reasignación de escuelas | Admin UI | UX mejorable |
5. DELEGACIONES PLANIFICADAS
5.1 ARCHITECTURE-ANALYST
Objetivo: Análisis profundo de dependencias y diseño de solución
Tareas:
- Validar arquitectura actual de flujo de usuarios
- Diseñar solución para School Default
- Mapear dependencias entre tablas
- Proponer estructura de seed para institución default
5.2 DATABASE (después de análisis)
Objetivo: Implementación de cambios DDL/Seeds
Tareas:
- Crear seed de School Default si no existe
- Verificar/corregir función
assign_default_classroom - Validar triggers de inicialización
5.3 BACKEND (después de DB)
Objetivo: Implementación de servicios
Tareas:
- Implementar/corregir
AuthService.register() - Actualizar
last_sign_in_aten login - Mapear respuesta de API users
5.4 FRONTEND (después de Backend)
Objetivo: Correcciones de UI
Tareas:
- Corregir mapping de
lastLoginen AdminUsersPage - Verificar tipos de SystemUser
6. PREGUNTAS DE CLARIFICACIÓN
Antes de proceder a FASE 2, necesito clarificar:
-
School Default: ¿Crear una nueva escuela "Sistema - Por Asignar" o usar Marie Curie como default?
-
Admin School: ¿El admin debe tener una escuela asignada o es correcta que sea NULL?
-
Flujo OAuth: ¿Los usuarios que se registran vía OAuth también deben asignarse al classroom default?
-
Reasignación masiva: ¿Se requiere funcionalidad para mover todos los estudiantes de una aula a otra?
7. SIGUIENTE PASO
FASE 2: Ejecución de Análisis
- Delegar a ARCHITECTURE-ANALYST para análisis profundo
- Ejecutar análisis con subagentes especializados
- Consolidar hallazgos en reporte
Fin del Plan de Análisis - FASE 1 Documento generado por Tech-Leader - 2025-12-15