workspace-v1/projects/gamilit/database/seeds/dev/social_features/03-classroom-members.sql
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
Structure:
- control-plane/: Registries, SIMCO directives, CI/CD templates
- projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics
- shared/: Libs catalog, knowledge-base

Key features:
- Centralized port, domain, database, and service registries
- 23 SIMCO directives + 6 fundamental principles
- NEXUS agent profiles with delegation rules
- Validation scripts for workspace integrity
- Dockerfiles for all services
- Path aliases for quick reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:35:19 -06:00

336 lines
10 KiB
SQL

-- =====================================================================
-- Archivo: 03-classroom-members.sql
-- Schema: social_features
-- Descripción: Seeds de membresías de estudiantes a aulas
-- Dependencias: 02-classrooms.sql, auth.users (estudiantes)
-- Autor: SA-SEEDS-SOCIAL
-- Fecha: 2025-11-02
-- =====================================================================
SET search_path TO social_features, auth, public;
-- =====================================================================
-- CLASSROOM MEMBERS: Asignar estudiantes demo a aulas
-- =====================================================================
DO $$
DECLARE
classroom_2a UUID;
classroom_3b UUID;
classroom_1c UUID;
classroom_1a UUID;
classroom_2b UUID;
classroom_2st UUID;
classroom_3adv UUID;
student1_id UUID;
student2_id UUID;
student3_id UUID;
enrolled_count INTEGER;
BEGIN
-- =====================================================================
-- Obtener classroom IDs dinámicamente
-- =====================================================================
SELECT classroom_id INTO classroom_2a
FROM social_features.classrooms
WHERE classroom_code = '2A-LECT-2025';
SELECT classroom_id INTO classroom_3b
FROM social_features.classrooms
WHERE classroom_code = '3B-DIGI-2025';
SELECT classroom_id INTO classroom_1c
FROM social_features.classrooms
WHERE classroom_code = '1C-BASIC-2025';
SELECT classroom_id INTO classroom_1a
FROM social_features.classrooms
WHERE classroom_code = '1A-INTRO-2025';
SELECT classroom_id INTO classroom_2b
FROM social_features.classrooms
WHERE classroom_code = '2B-TECH-2025';
SELECT classroom_id INTO classroom_2st
FROM social_features.classrooms
WHERE classroom_code = '2ST-LITC-2025';
SELECT classroom_id INTO classroom_3adv
FROM social_features.classrooms
WHERE classroom_code = '3ADV-CRIT-2025';
-- =====================================================================
-- Obtener student IDs
-- =====================================================================
SELECT user_id INTO student1_id
FROM auth.users
WHERE email = 'estudiante1@demo.glit.edu.mx';
SELECT user_id INTO student2_id
FROM auth.users
WHERE email = 'estudiante2@demo.glit.edu.mx';
SELECT user_id INTO student3_id
FROM auth.users
WHERE email = 'estudiante3@demo.glit.edu.mx';
-- Validar que existan los estudiantes
IF student1_id IS NULL OR student2_id IS NULL OR student3_id IS NULL THEN
RAISE EXCEPTION 'No se encontraron todos los estudiantes demo. Ejecutar seeds de auth primero.';
END IF;
-- =====================================================================
-- MEMBRESÍAS PARA ESTUDIANTE 1
-- Perfil: Estudiante activo, inscrito en múltiples aulas
-- =====================================================================
-- Estudiante 1 → Aula 2° A (Secundaria Federal 15)
INSERT INTO social_features.classroom_members (
classroom_id, user_id, role,
joined_at, is_active, is_active,
settings, metadata, created_at, updated_at
) VALUES
(
classroom_2a,
student1_id,
'student',
'2025-08-15',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"preferred_communication": "email"
}'::jsonb,
'{
"enrollment_type": "regular",
"previous_performance": "excellent",
"special_needs": false
}'::jsonb,
NOW(),
NOW()
),
-- Estudiante 1 → Aula 3° B (Multi-enrollment)
(
classroom_3b,
student1_id,
'student',
'2025-08-20',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"preferred_communication": "email"
}'::jsonb,
'{
"enrollment_type": "advanced_placement",
"reason": "Alto desempeño en lectura digital"
}'::jsonb,
NOW(),
NOW()
),
-- =====================================================================
-- MEMBRESÍAS PARA ESTUDIANTE 2
-- Perfil: Estudiante de secundaria técnica
-- =====================================================================
-- Estudiante 2 → Aula 3° B (Secundaria Federal 15)
(
classroom_3b,
student2_id,
'student',
'2025-08-15',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"preferred_communication": "sms"
}'::jsonb,
'{
"enrollment_type": "regular",
"previous_performance": "good",
"special_needs": false
}'::jsonb,
NOW(),
NOW()
),
-- Estudiante 2 → Aula 2° B Técnica (Secundaria Técnica 42)
(
classroom_2b,
student2_id,
'student',
'2025-08-15',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"workshop_access": true
}'::jsonb,
'{
"enrollment_type": "technical_specialty",
"specialty": "Computación",
"workshop_schedule": "Lunes y Miércoles 16:00-18:00"
}'::jsonb,
NOW(),
NOW()
),
-- =====================================================================
-- MEMBRESÍAS PARA ESTUDIANTE 3
-- Perfil: Estudiante de primer año
-- =====================================================================
-- Estudiante 3 → Aula 1° A (Secundaria Técnica 42)
(
classroom_1a,
student3_id,
'student',
'2025-08-15',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"parental_monitoring": true
}'::jsonb,
'{
"enrollment_type": "regular",
"is_first_year": true,
"orientation_completed": true,
"parent_contact": "padre3@demo.glit.edu.mx"
}'::jsonb,
NOW(),
NOW()
),
-- Estudiante 3 → Aula 1° C Básica (Secundaria Federal 15)
(
classroom_1c,
student3_id,
'student',
'2025-08-18',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"parental_monitoring": true
}'::jsonb,
'{
"enrollment_type": "regular",
"is_first_year": true,
"foundational_support": true
}'::jsonb,
NOW(),
NOW()
),
-- =====================================================================
-- MEMBRESÍAS ADICIONALES PARA VARIEDAD
-- =====================================================================
-- Estudiante 1 → Aula STEAM (Colegio Einstein)
(
classroom_2st,
student1_id,
'student',
'2025-08-15',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"bilingual_mode": true
}'::jsonb,
'{
"enrollment_type": "steam_program",
"scholarship": true,
"stem_projects_enrolled": ["Biografías Científicas", "Science Fair"]
}'::jsonb,
NOW(),
NOW()
),
-- Estudiante 2 → Aula Advanced (Colegio Einstein)
(
classroom_3adv,
student2_id,
'student',
'2025-08-15',
'active',
true,
'{
"attendance_tracking": true,
"grade_visibility": true,
"notifications_enabled": true,
"bilingual_mode": true,
"advanced_resources": true
}'::jsonb,
'{
"enrollment_type": "advanced_placement",
"cambridge_candidate": true,
"debate_team": true
}'::jsonb,
NOW(),
NOW()
)
ON CONFLICT (classroom_id, user_id) DO UPDATE SET
status = EXCLUDED.is_active,
settings = EXCLUDED.settings,
metadata = EXCLUDED.metadata,
updated_at = NOW();
-- =====================================================================
-- Actualizar enrollment counts en classrooms
-- =====================================================================
UPDATE social_features.classrooms
SET current_enrollment = (
SELECT COUNT(*)
FROM social_features.classroom_members
WHERE classroom_members.classroom_id = classrooms.classroom_id
AND status = 'active'
)
WHERE classroom_id IN (
classroom_2a, classroom_3b, classroom_1c,
classroom_1a, classroom_2b,
classroom_2st, classroom_3adv
);
-- =====================================================================
-- Verificación de inserción
-- =====================================================================
SELECT COUNT(*) INTO enrolled_count
FROM social_features.classroom_members
WHERE status = 'active';
RAISE NOTICE 'Total de membresías activas creadas: %', enrolled_count;
RAISE NOTICE 'Estudiante 1: % aulas', (
SELECT COUNT(*)
FROM social_features.classroom_members
WHERE user_id = student1_id AND status = 'active'
);
RAISE NOTICE 'Estudiante 2: % aulas', (
SELECT COUNT(*)
FROM social_features.classroom_members
WHERE user_id = student2_id AND status = 'active'
);
RAISE NOTICE 'Estudiante 3: % aulas', (
SELECT COUNT(*)
FROM social_features.classroom_members
WHERE user_id = student3_id AND status = 'active'
);
END $$;