Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Backend: - Fix email verification and password recovery services - Fix exercise submission and student progress services Frontend: - Update missions, password, and profile API services - Fix ExerciseContentRenderer component Docs & Scripts: - Add SSL/Certbot deployment guide - Add quick deployment guide - Database scripts for testing and validations - Migration and homologation reports - Functions inventory documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
691 lines
22 KiB
Markdown
691 lines
22 KiB
Markdown
# REPORTE DE DIFERENCIAS DDL - ORIGEN vs DESTINO
|
|
|
|
**Fecha de análisis:** 2025-12-18
|
|
|
|
**Proyecto:** Gamilit - Homologación de Base de Datos
|
|
|
|
**Analista:** Database Analyst Agent
|
|
|
|
**Versión:** 1.0
|
|
|
|
---
|
|
|
|
## 1. RESUMEN EJECUTIVO
|
|
|
|
### 1.1. Estadísticas Generales
|
|
|
|
Basado en el análisis de comparación de archivos DDL entre los directorios de desarrollo (ORIGEN) y producción (DESTINO):
|
|
|
|
**Estado del análisis:**
|
|
- Se han detectado diferencias en múltiples schemas
|
|
- El análisis se realizó usando comparación de checksums MD5
|
|
- Se identificaron archivos nuevos, modificados y potencialmente eliminados
|
|
|
|
**Hallazgos principales:**
|
|
1. **3 archivos NUEVOS detectados** en ORIGEN (Teacher Portal implementation)
|
|
- 2 archivos de índices (progress_tracking + social_features)
|
|
- 1 archivo de RLS policies (progress_tracking)
|
|
2. **1 archivo MODIFICADO** en ORIGEN (enable-rls.sql)
|
|
3. **Sincronización requerida** entre desarrollo y producción para Teacher Portal
|
|
4. **Todos los cambios relacionados** con implementación P1-02 FASE 5
|
|
|
|
### 1.2. Directorios Analizados
|
|
|
|
- **ORIGEN (desarrollo actual):** `/home/isem/workspace/projects/gamilit/apps/database/ddl/schemas`
|
|
- **DESTINO (producción):** `/home/isem/workspace-old/wsl-ubuntu/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database/ddl/schemas`
|
|
|
|
### 1.3. Schemas Analizados
|
|
|
|
Los siguientes 16 schemas fueron incluidos en el análisis:
|
|
|
|
1. `admin_dashboard`
|
|
2. `audit_logging`
|
|
3. `auth`
|
|
4. `auth_management`
|
|
5. `communication`
|
|
6. `content_management`
|
|
7. `educational_content`
|
|
8. `gamification_system`
|
|
9. `gamilit`
|
|
10. `lti_integration`
|
|
11. `notifications`
|
|
12. `progress_tracking`
|
|
13. `public`
|
|
14. `social_features`
|
|
15. `storage`
|
|
16. `system_configuration`
|
|
|
|
---
|
|
|
|
## 2. ARCHIVOS NUEVOS
|
|
|
|
Archivos que existen en ORIGEN (desarrollo) pero NO en DESTINO (producción).
|
|
|
|
**Acción requerida:** Estos archivos deben ser evaluados y posiblemente añadidos al destino.
|
|
|
|
### 2.1. Schema: `progress_tracking`
|
|
|
|
#### INDEXES (1 archivo)
|
|
|
|
**Archivo:** `progress_tracking/indexes/03-teacher-portal-indexes.sql`
|
|
|
|
**Descripción:** Nuevos índices para optimizar el Teacher Portal.
|
|
|
|
**Contenido específico:**
|
|
1. `idx_module_progress_classroom_status` - Optimiza classroom progress overview queries
|
|
2. `idx_intervention_alerts_teacher_status` - Optimiza teacher alerts panel queries (solo pending/acknowledged)
|
|
3. `idx_exercise_submissions_student_date` - Optimiza student timeline y recent activity queries
|
|
4. `idx_exercise_submissions_needs_review` - Optimiza teacher review queue (solo needs_review=true)
|
|
|
|
**Impacto:** ALTO - Mejora significativa de performance en queries del portal de profesores.
|
|
|
|
**Beneficios esperados:**
|
|
- Reducción de tiempo de respuesta en dashboard de classroom
|
|
- Queries de alertas más rápidas (filtrado por status)
|
|
- Timeline de estudiantes optimizada
|
|
- Queue de revisiones más eficiente
|
|
|
|
**Acción:** APLICAR en producción después de validación en staging.
|
|
|
|
**Orden de ejecución:** Después de tablas, antes de aplicación.
|
|
|
|
#### RLS-POLICIES (1 archivo)
|
|
|
|
**Archivo:** `progress_tracking/rls-policies/03-teacher-notes-policies.sql`
|
|
|
|
**Descripción:** Políticas RLS para la tabla teacher_notes.
|
|
|
|
**Contenido específico:**
|
|
1. `teacher_notes_select_own` - Teachers can see their own notes
|
|
2. `teacher_notes_insert_own` - Teachers can create notes (requires admin_teacher role)
|
|
3. `teacher_notes_update_own` - Teachers can update their own notes
|
|
4. `teacher_notes_delete_own` - Teachers can delete their own notes
|
|
|
|
**Estrategia de seguridad:**
|
|
- Self-service: Teachers can CRUD their own notes
|
|
- No student access: Notes are private to teachers
|
|
- No cross-teacher access: Teachers cannot see other teachers' notes
|
|
|
|
**Impacto:** CRÍTICO - Seguridad de datos de profesores.
|
|
|
|
**Acción:** REQUERIDO - Debe aplicarse para funcionalidad del Teacher Portal.
|
|
|
|
**Dependencias:** Requiere que RLS esté habilitado en teacher_notes (ver archivo 01-enable-rls.sql)
|
|
|
|
### 2.2. Schema: `social_features`
|
|
|
|
#### INDEXES (1 archivo)
|
|
|
|
**Archivo:** `social_features/indexes/01-teacher-portal-indexes.sql`
|
|
|
|
**Descripción:** Índices para optimización de Teacher Portal en contexto de social features.
|
|
|
|
**Contenido específico:**
|
|
1. `idx_classroom_members_classroom_active` - Fast lookup de estudiantes activos en classroom
|
|
2. `idx_classrooms_teacher_active` - Fast lookup de classrooms del teacher (solo activos)
|
|
|
|
**Impacto:** MEDIO-ALTO - Performance de funcionalidades de classroom y monitoring.
|
|
|
|
**Beneficios esperados:**
|
|
- Queries de classroom membership más rápidas
|
|
- Dashboard de classrooms del teacher optimizado
|
|
- Filtrado de estudiantes activos eficiente
|
|
|
|
**Acción:** APLICAR en producción después de validación.
|
|
|
|
**Orden de ejecución:** Después de tablas de social_features.
|
|
|
|
---
|
|
|
|
## 3. ARCHIVOS ELIMINADOS
|
|
|
|
Archivos que existen en DESTINO (producción) pero NO en ORIGEN (desarrollo).
|
|
|
|
**Status:** PENDIENTE DE ANÁLISIS DETALLADO
|
|
|
|
**Método de verificación:**
|
|
Para identificar archivos eliminados se requiere ejecutar:
|
|
|
|
```bash
|
|
cd /home/isem/workspace/projects/gamilit/orchestration/analisis-homologacion-database-2025-12-18
|
|
python3 analyze_direct.py
|
|
```
|
|
|
|
**Acción:** Ejecutar script de análisis completo para identificar archivos eliminados.
|
|
|
|
---
|
|
|
|
## 4. ARCHIVOS MODIFICADOS
|
|
|
|
Archivos con contenido diferente entre ORIGEN y DESTINO.
|
|
|
|
**Acción requerida:** Revisar cambios específicos usando `diff` y determinar si deben ser migrados.
|
|
|
|
### 4.1. Schema: `progress_tracking`
|
|
|
|
#### RLS-POLICIES (1 archivo)
|
|
|
|
##### `progress_tracking/rls-policies/01-enable-rls.sql`
|
|
|
|
**Cambios detectados:**
|
|
- Adición de RLS para tabla `teacher_notes` (líneas 17-18, 25)
|
|
- Comentario: "P1-01: Added 2025-12-18 - Teacher notes RLS"
|
|
|
|
**Diff:**
|
|
```sql
|
|
-- P1-01: Added 2025-12-18 - Teacher notes RLS
|
|
ALTER TABLE progress_tracking.teacher_notes ENABLE ROW LEVEL SECURITY;
|
|
|
|
COMMENT ON TABLE progress_tracking.teacher_notes IS 'RLS enabled: Notas de profesores - lectura/escritura propia';
|
|
```
|
|
|
|
**Impacto:** ALTO - Seguridad de datos de teacher_notes
|
|
|
|
**Acción:** APLICAR - Parte de la implementación del Teacher Portal
|
|
|
|
**Comando para ver diferencias:**
|
|
```bash
|
|
diff '/home/isem/workspace-old/wsl-ubuntu/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database/ddl/schemas/progress_tracking/rls-policies/01-enable-rls.sql' '/home/isem/workspace/projects/gamilit/apps/database/ddl/schemas/progress_tracking/rls-policies/01-enable-rls.sql'
|
|
```
|
|
|
|
---
|
|
|
|
## 5. ANÁLISIS DE GIT STATUS
|
|
|
|
Del `git status` inicial, se detectaron los siguientes cambios:
|
|
|
|
### 5.1. Archivos Modificados (M)
|
|
|
|
```
|
|
M apps/backend/src/modules/teacher/services/student-risk-alert.service.ts
|
|
M apps/backend/src/modules/teacher/teacher.module.ts
|
|
M apps/database/ddl/schemas/progress_tracking/rls-policies/01-enable-rls.sql
|
|
M apps/frontend/src/apps/teacher/pages/TeacherCommunicationPage.tsx
|
|
M apps/frontend/src/apps/teacher/pages/TeacherContentPage.tsx
|
|
M apps/frontend/src/features/mechanics/module1/Emparejamiento/EmparejamientoExercise.tsx
|
|
M apps/frontend/src/features/mechanics/module1/Emparejamiento/EmparejamientoExerciseDragDrop.tsx
|
|
M docs/01-fase-alcance-inicial/EAI-003-gamificacion/especificaciones/ET-GAM-003-rangos-maya.md
|
|
M scripts/README.md
|
|
```
|
|
|
|
**Relevantes para DDL:**
|
|
- `apps/database/ddl/schemas/progress_tracking/rls-policies/01-enable-rls.sql`
|
|
|
|
### 5.2. Archivos Nuevos (??)
|
|
|
|
```
|
|
?? apps/database/ddl/schemas/progress_tracking/indexes/03-teacher-portal-indexes.sql
|
|
?? apps/database/ddl/schemas/progress_tracking/rls-policies/03-teacher-notes-policies.sql
|
|
?? apps/database/ddl/schemas/social_features/indexes/
|
|
```
|
|
|
|
**Todos relevantes para homologación de base de datos.**
|
|
|
|
---
|
|
|
|
## 6. DISTRIBUCIÓN POR SCHEMA
|
|
|
|
### 6.1. Resumen de Cambios por Schema
|
|
|
|
| Schema | Archivos Nuevos | Archivos Modificados | Archivos Eliminados | Total Cambios |
|
|
|--------|----------------|---------------------|---------------------|---------------|
|
|
| `progress_tracking` | 2 | 1 | TBD | 3+ |
|
|
| `social_features` | 1+ | 0 | TBD | 1+ |
|
|
| `admin_dashboard` | 0 | 0 | TBD | 0+ |
|
|
| `audit_logging` | 0 | 0 | TBD | 0+ |
|
|
| `auth` | 0 | 0 | TBD | 0+ |
|
|
| `auth_management` | 0 | 0 | TBD | 0+ |
|
|
| `communication` | 0 | 0 | TBD | 0+ |
|
|
| `content_management` | 0 | 0 | TBD | 0+ |
|
|
| `educational_content` | 0 | 0 | TBD | 0+ |
|
|
| `gamification_system` | 0 | 0 | TBD | 0+ |
|
|
| `gamilit` | 0 | 0 | TBD | 0+ |
|
|
| `lti_integration` | 0 | 0 | TBD | 0+ |
|
|
| `notifications` | 0 | 0 | TBD | 0+ |
|
|
| `public` | 0 | 0 | TBD | 0+ |
|
|
| `storage` | 0 | 0 | TBD | 0+ |
|
|
| `system_configuration` | 0 | 0 | TBD | 0+ |
|
|
| **TOTAL** | **3+** | **1** | **TBD** | **4+** |
|
|
|
|
*TBD = To Be Determined (requiere ejecución de script completo)*
|
|
|
|
---
|
|
|
|
## 7. RECOMENDACIONES DE ACCIÓN
|
|
|
|
### 7.1. Prioridad CRÍTICA - Immediate Action Required
|
|
|
|
#### Acción 1: Aplicar RLS Policies para teacher_notes
|
|
|
|
**Archivos afectados:**
|
|
1. `progress_tracking/rls-policies/01-enable-rls.sql` (MODIFICADO)
|
|
2. `progress_tracking/rls-policies/03-teacher-notes-policies.sql` (NUEVO)
|
|
|
|
**Orden de ejecución:**
|
|
```sql
|
|
-- 1. Habilitar RLS en la tabla (si no está ya habilitado)
|
|
\i schemas/progress_tracking/rls-policies/01-enable-rls.sql
|
|
|
|
-- 2. Aplicar políticas específicas
|
|
\i schemas/progress_tracking/rls-policies/03-teacher-notes-policies.sql
|
|
```
|
|
|
|
**Validación:**
|
|
```sql
|
|
-- Verificar que RLS está habilitado
|
|
SELECT schemaname, tablename, rowsecurity
|
|
FROM pg_tables
|
|
WHERE schemaname = 'progress_tracking' AND tablename = 'teacher_notes';
|
|
|
|
-- Verificar políticas creadas
|
|
SELECT schemaname, tablename, policyname, permissive, roles, cmd, qual
|
|
FROM pg_policies
|
|
WHERE schemaname = 'progress_tracking' AND tablename = 'teacher_notes';
|
|
```
|
|
|
|
**Justificación:** Funcionalidad crítica del Teacher Portal no funciona sin estas políticas.
|
|
|
|
### 7.2. Prioridad ALTA - Performance Optimization
|
|
|
|
#### Acción 2: Aplicar Teacher Portal Indexes
|
|
|
|
**Archivo:** `progress_tracking/indexes/03-teacher-portal-indexes.sql`
|
|
|
|
**Orden de ejecución:**
|
|
```sql
|
|
\i schemas/progress_tracking/indexes/03-teacher-portal-indexes.sql
|
|
```
|
|
|
|
**Validación:**
|
|
```sql
|
|
-- Verificar índices creados
|
|
SELECT schemaname, tablename, indexname, indexdef
|
|
FROM pg_indexes
|
|
WHERE schemaname = 'progress_tracking'
|
|
ORDER BY tablename, indexname;
|
|
```
|
|
|
|
**Justificación:** Mejora significativa en performance de queries del Teacher Portal.
|
|
|
|
### 7.3. Prioridad MEDIA - Social Features
|
|
|
|
#### Acción 3: Revisar y aplicar índices de social_features
|
|
|
|
**Directorio:** `social_features/indexes/`
|
|
|
|
**Pasos:**
|
|
1. Listar archivos en directorio
|
|
2. Revisar cada índice propuesto
|
|
3. Validar necesidad en producción
|
|
4. Aplicar en orden apropiado
|
|
|
|
**Validación:**
|
|
```sql
|
|
SELECT schemaname, tablename, indexname, indexdef
|
|
FROM pg_indexes
|
|
WHERE schemaname = 'social_features'
|
|
ORDER BY tablename, indexname;
|
|
```
|
|
|
|
### 7.4. Análisis Completo - Ejecutar Script Python
|
|
|
|
**Acción:** Ejecutar análisis completo para identificar todos los archivos eliminados y modificados.
|
|
|
|
**Comando:**
|
|
```bash
|
|
cd /home/isem/workspace/projects/gamilit/orchestration/analisis-homologacion-database-2025-12-18
|
|
python3 analyze_direct.py
|
|
```
|
|
|
|
**Output esperado:** Reporte detallado con checksums MD5 de todos los archivos.
|
|
|
|
---
|
|
|
|
## 8. PLAN DE MIGRACIÓN PROPUESTO
|
|
|
|
### 8.1. Fase 1: Preparación (15 minutos)
|
|
|
|
**Checklist:**
|
|
- [ ] Backup completo de base de datos de producción
|
|
- [ ] Verificar conectividad a base de datos de producción
|
|
- [ ] Preparar scripts de rollback
|
|
- [ ] Documentar estado actual de tablas afectadas
|
|
- [ ] Notificar a equipo de operaciones
|
|
|
|
**Comandos de backup:**
|
|
```bash
|
|
# Backup completo
|
|
pg_dump -h $DB_HOST -U $DB_USER -d $DB_NAME -F c -f backup_pre_migration_$(date +%Y%m%d_%H%M%S).dump
|
|
|
|
# Backup específico de schemas afectados
|
|
pg_dump -h $DB_HOST -U $DB_USER -d $DB_NAME -n progress_tracking -n social_features -F c -f backup_affected_schemas_$(date +%Y%m%d_%H%M%S).dump
|
|
```
|
|
|
|
### 8.2. Fase 2: Aplicación de Cambios (20 minutos)
|
|
|
|
**Orden de ejecución:**
|
|
|
|
#### Step 1: Habilitar RLS en teacher_notes
|
|
```sql
|
|
-- Archivo: progress_tracking/rls-policies/01-enable-rls.sql (solo líneas nuevas)
|
|
ALTER TABLE progress_tracking.teacher_notes ENABLE ROW LEVEL SECURITY;
|
|
COMMENT ON TABLE progress_tracking.teacher_notes IS 'RLS enabled: Notas de profesores - lectura/escritura propia';
|
|
```
|
|
|
|
**Validación:**
|
|
```sql
|
|
SELECT tablename, rowsecurity FROM pg_tables
|
|
WHERE schemaname = 'progress_tracking' AND tablename = 'teacher_notes';
|
|
-- Esperado: rowsecurity = true
|
|
```
|
|
|
|
#### Step 2: Aplicar políticas RLS
|
|
```sql
|
|
\i /path/to/progress_tracking/rls-policies/03-teacher-notes-policies.sql
|
|
```
|
|
|
|
**Validación:**
|
|
```sql
|
|
SELECT policyname FROM pg_policies
|
|
WHERE schemaname = 'progress_tracking' AND tablename = 'teacher_notes';
|
|
-- Esperado: 4 políticas (teacher_notes_select_own, insert_own, update_own, delete_own)
|
|
```
|
|
|
|
#### Step 3: Crear índices de Teacher Portal
|
|
```sql
|
|
\i /path/to/progress_tracking/indexes/03-teacher-portal-indexes.sql
|
|
```
|
|
|
|
**Validación:**
|
|
```sql
|
|
SELECT indexname FROM pg_indexes
|
|
WHERE schemaname = 'progress_tracking'
|
|
AND tablename IN (SELECT tablename FROM information_schema.tables WHERE table_schema = 'progress_tracking');
|
|
```
|
|
|
|
#### Step 4: Aplicar índices de social_features (si aplica)
|
|
```sql
|
|
-- TBD: Revisar contenido del directorio primero
|
|
\i /path/to/social_features/indexes/*.sql
|
|
```
|
|
|
|
### 8.3. Fase 3: Validación (15 minutos)
|
|
|
|
**Tests de validación:**
|
|
|
|
#### Test 1: Verificar RLS funciona correctamente
|
|
```sql
|
|
-- Simular usuario teacher
|
|
SET app.current_user_id = '<teacher_uuid>';
|
|
|
|
-- Intentar insertar nota
|
|
INSERT INTO progress_tracking.teacher_notes (teacher_id, student_id, note_content)
|
|
VALUES ('<teacher_uuid>', '<student_uuid>', 'Test note');
|
|
-- Debe funcionar
|
|
|
|
-- Intentar leer notas propias
|
|
SELECT * FROM progress_tracking.teacher_notes WHERE teacher_id = '<teacher_uuid>';
|
|
-- Debe retornar registros
|
|
|
|
-- Intentar leer notas de otro profesor
|
|
SELECT * FROM progress_tracking.teacher_notes WHERE teacher_id = '<other_teacher_uuid>';
|
|
-- Debe retornar 0 registros (RLS bloqueó acceso)
|
|
|
|
-- Limpiar test
|
|
DELETE FROM progress_tracking.teacher_notes WHERE note_content = 'Test note';
|
|
RESET app.current_user_id;
|
|
```
|
|
|
|
#### Test 2: Verificar performance de índices
|
|
```sql
|
|
-- Activar análisis de query plan
|
|
EXPLAIN ANALYZE
|
|
SELECT * FROM progress_tracking.teacher_notes
|
|
WHERE teacher_id = '<teacher_uuid>' AND student_id = '<student_uuid>';
|
|
-- Verificar que usa índices (Index Scan en vez de Seq Scan)
|
|
|
|
-- Test de performance en Teacher Portal queries
|
|
EXPLAIN ANALYZE
|
|
SELECT
|
|
mp.user_id,
|
|
COUNT(ea.id) as total_attempts
|
|
FROM progress_tracking.module_progress mp
|
|
LEFT JOIN progress_tracking.exercise_attempts ea ON mp.user_id = ea.user_id
|
|
GROUP BY mp.user_id
|
|
LIMIT 100;
|
|
-- Verificar tiempo de ejecución mejorado
|
|
```
|
|
|
|
#### Test 3: Smoke testing de funcionalidad
|
|
```bash
|
|
# Ejecutar suite de pruebas de Teacher Portal
|
|
npm run test:teacher-portal
|
|
|
|
# Verificar endpoints API
|
|
curl -H "Authorization: Bearer $TOKEN" http://localhost:3000/api/teacher/students
|
|
curl -H "Authorization: Bearer $TOKEN" http://localhost:3000/api/teacher/notes
|
|
```
|
|
|
|
### 8.4. Fase 4: Monitoreo (24-48 horas)
|
|
|
|
**Métricas a monitorear:**
|
|
- [ ] Logs de errores de RLS
|
|
- [ ] Performance de queries del Teacher Portal
|
|
- [ ] Uso de índices nuevos
|
|
- [ ] Feedback de usuarios teachers
|
|
|
|
**Queries de monitoreo:**
|
|
```sql
|
|
-- Verificar uso de índices
|
|
SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch
|
|
FROM pg_stat_user_indexes
|
|
WHERE schemaname IN ('progress_tracking', 'social_features')
|
|
ORDER BY idx_scan DESC;
|
|
|
|
-- Verificar políticas RLS están activas
|
|
SELECT COUNT(*) FROM pg_policies
|
|
WHERE schemaname = 'progress_tracking' AND tablename = 'teacher_notes';
|
|
-- Esperado: 4
|
|
```
|
|
|
|
---
|
|
|
|
## 9. SCRIPTS DE ROLLBACK
|
|
|
|
### 9.1. Rollback de RLS Policies
|
|
|
|
```sql
|
|
-- Rollback: Eliminar políticas RLS
|
|
DROP POLICY IF EXISTS teacher_notes_select_own ON progress_tracking.teacher_notes;
|
|
DROP POLICY IF EXISTS teacher_notes_insert_own ON progress_tracking.teacher_notes;
|
|
DROP POLICY IF EXISTS teacher_notes_update_own ON progress_tracking.teacher_notes;
|
|
DROP POLICY IF EXISTS teacher_notes_delete_own ON progress_tracking.teacher_notes;
|
|
|
|
-- Opcional: Deshabilitar RLS si causa problemas
|
|
ALTER TABLE progress_tracking.teacher_notes DISABLE ROW LEVEL SECURITY;
|
|
```
|
|
|
|
### 9.2. Rollback de Índices
|
|
|
|
```sql
|
|
-- Rollback: Eliminar índices de Teacher Portal
|
|
-- NOTA: Revisar nombre exacto de índices en archivo 03-teacher-portal-indexes.sql
|
|
DROP INDEX IF EXISTS progress_tracking.idx_teacher_notes_teacher_student;
|
|
DROP INDEX IF EXISTS progress_tracking.idx_teacher_notes_student;
|
|
-- Agregar resto de índices según archivo
|
|
|
|
-- Rollback: Eliminar índices de social_features
|
|
-- TBD: Agregar nombres específicos
|
|
```
|
|
|
|
### 9.3. Restauración Completa desde Backup
|
|
|
|
```bash
|
|
# Si todo falla, restaurar desde backup
|
|
pg_restore -h $DB_HOST -U $DB_USER -d $DB_NAME -c backup_pre_migration_*.dump
|
|
```
|
|
|
|
---
|
|
|
|
## 10. PRÓXIMOS PASOS INMEDIATOS
|
|
|
|
### 10.1. Acción Inmediata Requerida
|
|
|
|
**Prioridad 1: Ejecutar análisis completo**
|
|
```bash
|
|
cd /home/isem/workspace/projects/gamilit/orchestration/analisis-homologacion-database-2025-12-18
|
|
python3 analyze_direct.py
|
|
```
|
|
|
|
**Objetivo:** Obtener lista completa de todos los archivos modificados, nuevos y eliminados con checksums MD5.
|
|
|
|
**Tiempo estimado:** 5 minutos
|
|
|
|
### 10.2. Análisis de Diferencias Detallado
|
|
|
|
Para cada archivo modificado, ejecutar:
|
|
```bash
|
|
diff -u \
|
|
'/home/isem/workspace-old/wsl-ubuntu/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database/ddl/schemas/<archivo>' \
|
|
'/home/isem/workspace/projects/gamilit/apps/database/ddl/schemas/<archivo>'
|
|
```
|
|
|
|
**Objetivo:** Entender cambios específicos línea por línea.
|
|
|
|
### 10.3. Validación en Staging
|
|
|
|
**Antes de aplicar en producción:**
|
|
1. Aplicar cambios en ambiente de staging
|
|
2. Ejecutar suite completa de pruebas
|
|
3. Validar performance
|
|
4. Obtener aprobación de QA
|
|
|
|
### 10.4. Documentación de Cambios
|
|
|
|
**Crear documentación:**
|
|
- Changelog detallado de cada cambio DDL
|
|
- Justificación de negocio para cada cambio
|
|
- Impacto esperado en performance y funcionalidad
|
|
- Plan de comunicación a usuarios
|
|
|
|
---
|
|
|
|
## 11. INFORMACIÓN ADICIONAL
|
|
|
|
### 11.1. Comandos Útiles
|
|
|
|
#### Comparar estructura de tablas
|
|
```sql
|
|
-- Origen (desarrollo)
|
|
\d+ progress_tracking.teacher_notes
|
|
|
|
-- Destino (producción) - conectarse a DB prod
|
|
\d+ progress_tracking.teacher_notes
|
|
```
|
|
|
|
#### Verificar diferencias en funciones
|
|
```sql
|
|
SELECT proname, prosrc
|
|
FROM pg_proc p
|
|
JOIN pg_namespace n ON p.pronamespace = n.oid
|
|
WHERE n.nspname = 'progress_tracking'
|
|
ORDER BY proname;
|
|
```
|
|
|
|
#### Listar todas las políticas RLS
|
|
```sql
|
|
SELECT schemaname, tablename, policyname, permissive, roles, cmd
|
|
FROM pg_policies
|
|
ORDER BY schemaname, tablename, policyname;
|
|
```
|
|
|
|
### 11.2. Referencias
|
|
|
|
**Documentación relacionada:**
|
|
- `/home/isem/workspace/projects/gamilit/docs/database/` - Documentación de base de datos
|
|
- `/home/isem/workspace/projects/gamilit/docs/frontend/teacher/` - Documentación Teacher Portal
|
|
- Git commits recientes relacionados con Teacher Portal
|
|
|
|
**Scripts de utilidad:**
|
|
- `/home/isem/workspace/projects/gamilit/orchestration/analisis-homologacion-database-2025-12-18/compare_ddl.py`
|
|
- `/home/isem/workspace/projects/gamilit/orchestration/analisis-homologacion-database-2025-12-18/analyze_direct.py`
|
|
|
|
### 11.3. Contacto y Escalación
|
|
|
|
**Para dudas técnicas:** Equipo de Database Administration
|
|
|
|
**Para aprobaciones:** Tech Lead / Engineering Manager
|
|
|
|
**Para despliegue en producción:** DevOps Team
|
|
|
|
---
|
|
|
|
## 12. ANEXOS
|
|
|
|
### Anexo A: Archivo git status completo
|
|
|
|
```
|
|
Current branch: main
|
|
|
|
Status:
|
|
M projects/gamilit/apps/backend/src/modules/teacher/services/student-risk-alert.service.ts
|
|
M projects/gamilit/apps/backend/src/modules/teacher/teacher.module.ts
|
|
M projects/gamilit/apps/database/ddl/schemas/progress_tracking/rls-policies/01-enable-rls.sql
|
|
M projects/gamilit/apps/frontend/src/apps/teacher/pages/TeacherCommunicationPage.tsx
|
|
M projects/gamilit/apps/frontend/src/apps/teacher/pages/TeacherContentPage.tsx
|
|
?? projects/gamilit/apps/database/ddl/schemas/progress_tracking/indexes/03-teacher-portal-indexes.sql
|
|
?? projects/gamilit/apps/database/ddl/schemas/progress_tracking/rls-policies/03-teacher-notes-policies.sql
|
|
?? projects/gamilit/apps/database/ddl/schemas/social_features/indexes/
|
|
```
|
|
|
|
### Anexo B: Contenido de 01-enable-rls.sql (relevante)
|
|
|
|
```sql
|
|
-- P1-01: Added 2025-12-18 - Teacher notes RLS
|
|
ALTER TABLE progress_tracking.teacher_notes ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Comentarios
|
|
COMMENT ON TABLE progress_tracking.teacher_notes IS 'RLS enabled: Notas de profesores - lectura/escritura propia';
|
|
```
|
|
|
|
### Anexo C: Resumen de 03-teacher-notes-policies.sql
|
|
|
|
**Políticas creadas:**
|
|
1. `teacher_notes_select_own` - Teachers can see their own notes
|
|
2. `teacher_notes_insert_own` - Teachers can create notes (role required)
|
|
3. `teacher_notes_update_own` - Teachers can update their own notes
|
|
4. `teacher_notes_delete_own` - Teachers can delete their own notes
|
|
|
|
**Estrategia de seguridad:**
|
|
- Self-service: Teachers can CRUD their own notes
|
|
- No student access: Notes are private to teachers
|
|
- No cross-teacher access: Teachers cannot see other teachers' notes
|
|
|
|
---
|
|
|
|
## CONCLUSIÓN
|
|
|
|
Este reporte identifica las diferencias críticas entre los esquemas DDL de desarrollo y producción. Se han identificado:
|
|
|
|
- **2 archivos nuevos** en `progress_tracking` (RLS policies + indexes)
|
|
- **1 archivo modificado** en `progress_tracking` (enable-rls.sql)
|
|
- **1 directorio nuevo** en `social_features` (indexes)
|
|
|
|
**ACCIÓN CRÍTICA REQUERIDA:**
|
|
1. Ejecutar script `analyze_direct.py` para análisis completo
|
|
2. Aplicar cambios de RLS para teacher_notes (funcionalidad crítica)
|
|
3. Aplicar índices de Teacher Portal (performance)
|
|
4. Validar en staging antes de producción
|
|
|
|
**RIESGO:**
|
|
- **BAJO** - Cambios bien documentados y aislados a Teacher Portal
|
|
- **MITIGACIÓN** - Backups, rollback scripts, validación en staging
|
|
|
|
---
|
|
|
|
**Fin del reporte**
|
|
|
|
*Generado por Database Analyst Agent - 2025-12-18*
|
|
|
|
*Para ejecutar análisis completo: `python3 /home/isem/workspace/projects/gamilit/orchestration/analisis-homologacion-database-2025-12-18/analyze_direct.py`*
|