workspace-v1/projects/gamilit/database/seeds/prod/educational_content/05-assignments.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

318 lines
12 KiB
SQL

-- =====================================================
-- Seed: educational_content.assignments (PROD)
-- Description: Assignments demo para Portal Teacher
-- Environment: PRODUCTION
-- Dependencies: auth.users (teachers)
-- Order: 05
-- Created: 2025-11-24
-- Version: 2.0 (Corregido CORR-006)
-- =====================================================
--
-- CAMBIOS v2.0:
-- - Corregida estructura para coincidir con DDL real de assignments
-- - Eliminadas referencias a tablas inexistentes (assignment_classrooms, assignment_exercises)
-- - Ajustado a columnas reales: teacher_id, title, description, assignment_type, due_date, total_points, is_published
-- - 9 assignments distribuidos en 3 módulos conceptuales
-- - Fechas variadas: past (vencidos), present (activos), future (pendientes)
-- - Tipos variados: practice, quiz, exam, homework
--
-- ASSIGNMENTS INCLUIDOS:
-- - 3 para conceptos del Módulo 1 (Comprensión Literal)
-- - 3 para conceptos del Módulo 2 (Comprensión Inferencial)
-- - 3 para conceptos del Módulo 3 (Comprensión Crítica)
--
-- TOTAL: 9 assignments demo para Portal Teacher
--
-- =====================================================
SET search_path TO educational_content, auth, public;
-- =====================================================
-- LIMPIAR DATOS EXISTENTES (SOLO DEMO)
-- =====================================================
-- Eliminar assignments del teacher demo si existen
DELETE FROM educational_content.assignments
WHERE teacher_id = 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb';
-- =====================================================
-- Obtener IDs necesarios y validar dependencias
-- =====================================================
DO $$
DECLARE
v_teacher_id UUID;
BEGIN
-- Obtener el ID del profesor de testing
SELECT id INTO v_teacher_id
FROM auth.users
WHERE email = 'teacher@gamilit.com'
LIMIT 1;
IF v_teacher_id IS NULL THEN
RAISE EXCEPTION 'Teacher "teacher@gamilit.com" no encontrado. Ejecutar primero seed de auth/users.';
END IF;
RAISE NOTICE 'Usando teacher_id: %', v_teacher_id;
-- =====================================================
-- INSERT: 9 Assignments Demo
-- =====================================================
INSERT INTO educational_content.assignments (
id,
teacher_id,
title,
description,
assignment_type,
due_date,
total_points,
is_published,
created_at,
updated_at
) VALUES
-- =====================================================
-- MÓDULO 1: Comprensión Literal (3 assignments)
-- =====================================================
-- Assignment 1.1: Completado (vencido hace 7 días)
(
gen_random_uuid(),
v_teacher_id,
'Tarea 1.1: Crucigrama y Vocabulario Científico',
'Completa el crucigrama sobre términos científicos de Marie Curie y responde 5 preguntas de vocabulario. Incluye los ejercicios: Crucigrama Científico y Sopa de Letras. Esta tarea evaluará tu comprensión literal de los descubrimientos científicos de Marie Curie.',
'homework',
gamilit.now_mexico() - INTERVAL '7 days', -- Vencido hace 7 días
100,
true, -- Publicado
gamilit.now_mexico() - INTERVAL '14 days',
gamilit.now_mexico() - INTERVAL '14 days'
),
-- Assignment 1.2: Activo (vence en 2 días - URGENTE)
(
gen_random_uuid(),
v_teacher_id,
'Quiz 1.2: Línea de Tiempo de Marie Curie',
'Organiza cronológicamente los eventos más importantes de la vida de Marie Curie. Este quiz evaluará tu capacidad para identificar fechas y secuencias temporales del texto biográfico. Duración: 30 minutos.',
'quiz',
gamilit.now_mexico() + INTERVAL '2 days', -- Vence en 2 días
50,
true, -- Publicado
gamilit.now_mexico() - INTERVAL '5 days',
gamilit.now_mexico() - INTERVAL '5 days'
),
-- Assignment 1.3: Pendiente (vence en 10 días)
(
gen_random_uuid(),
v_teacher_id,
'Práctica 1.3: Mapa Conceptual - Descubrimientos',
'Crea un mapa conceptual que conecte a Marie Curie con sus descubrimientos científicos, instituciones y colaboradores. Esta práctica te permitirá visualizar las relaciones entre conceptos del módulo literal.',
'practice',
gamilit.now_mexico() + INTERVAL '10 days', -- Vence en 10 días
75,
true, -- Publicado
gamilit.now_mexico() - INTERVAL '2 days',
gamilit.now_mexico() - INTERVAL '2 days'
),
-- =====================================================
-- MÓDULO 2: Comprensión Inferencial (3 assignments)
-- =====================================================
-- Assignment 2.1: OVERDUE (vencido hace 3 días, aún publicado)
(
gen_random_uuid(),
v_teacher_id,
'Tarea 2.1: Relaciones Causa-Efecto',
'Identifica 3 relaciones causa-efecto en la vida de Marie Curie. Por ejemplo: la muerte de su madre → Marie se dedicó intensamente a los estudios. Debes encontrar al menos 3 ejemplos bien argumentados del texto.',
'homework',
gamilit.now_mexico() - INTERVAL '3 days', -- OVERDUE hace 3 días
120,
true, -- Publicado (aún pueden entregarla tarde)
gamilit.now_mexico() - INTERVAL '10 days',
gamilit.now_mexico() - INTERVAL '10 days'
),
-- Assignment 2.2: Activo (vence en 5 días)
(
gen_random_uuid(),
v_teacher_id,
'Quiz 2.2: Rueda de Inferencias',
'Resuelve 5 preguntas de inferencia sobre las motivaciones y decisiones de Marie Curie. Usa la Rueda de Inferencias para analizar contextos implícitos del texto. Duración: 45 minutos.',
'quiz',
gamilit.now_mexico() + INTERVAL '5 days', -- Vence en 5 días
100,
true, -- Publicado
gamilit.now_mexico() - INTERVAL '3 days',
gamilit.now_mexico() - INTERVAL '3 days'
),
-- Assignment 2.3: Pendiente (vence en 15 días)
(
gen_random_uuid(),
v_teacher_id,
'Práctica 2.3: Análisis de Decisiones',
'Analiza 3 decisiones importantes de Marie Curie (ejemplo: rechazar comercializar el radio) y explica las razones implícitas detrás de cada una. Usa evidencia del texto para respaldar tus inferencias.',
'practice',
gamilit.now_mexico() + INTERVAL '15 days', -- Vence en 15 días
150,
true, -- Publicado
gamilit.now_mexico() - INTERVAL '1 day',
gamilit.now_mexico() - INTERVAL '1 day'
),
-- =====================================================
-- MÓDULO 3: Comprensión Crítica (3 assignments)
-- =====================================================
-- Assignment 3.1: Activo (vence en 7 días)
(
gen_random_uuid(),
v_teacher_id,
'Tarea 3.1: Ensayo Crítico - Rol de la Mujer en Ciencia',
'Escribe un ensayo corto (300-400 palabras) sobre cómo Marie Curie desafió los roles de género de su época. Incluye 3 argumentos fundamentados en el texto y 1 reflexión personal sobre la importancia de su legado.',
'homework',
gamilit.now_mexico() + INTERVAL '7 days', -- Vence en 7 días
200,
true, -- Publicado
gamilit.now_mexico() - INTERVAL '4 days',
gamilit.now_mexico() - INTERVAL '4 days'
),
-- Assignment 3.2: Activo (vence en 3 días - URGENTE, quiz corto)
(
gen_random_uuid(),
v_teacher_id,
'Quiz 3.2: Evaluación Crítica Express',
'Quiz corto (15 minutos) con 3 preguntas de evaluación crítica sobre las decisiones éticas de Marie Curie. Ejemplo: ¿Fue correcto que no patentara el proceso de extracción del radio?',
'quiz',
gamilit.now_mexico() + INTERVAL '3 days', -- Vence en 3 días
50,
true, -- Publicado
gamilit.now_mexico() - INTERVAL '1 day',
gamilit.now_mexico() - INTERVAL '1 day'
),
-- Assignment 3.3: Pendiente (vence en 30 días - proyecto final)
(
gen_random_uuid(),
v_teacher_id,
'Proyecto Final: Presentación Multimedia sobre Marie Curie',
'Crea una presentación multimedia (video, podcast o infografía) que analice críticamente el impacto de Marie Curie en la ciencia moderna y la igualdad de género. Debe incluir: biografía, descubrimientos, obstáculos superados y legado actual. Duración: 5-7 minutos.',
'exam',
gamilit.now_mexico() + INTERVAL '30 days', -- Vence en 30 días (proyecto final)
300,
false, -- Borrador (aún no publicado)
gamilit.now_mexico() - INTERVAL '1 day',
gamilit.now_mexico() - INTERVAL '1 day'
)
ON CONFLICT (id) DO NOTHING;
END $$;
-- =====================================================
-- Verification Query
-- =====================================================
DO $$
DECLARE
assignment_count INTEGER;
published_count INTEGER;
overdue_count INTEGER;
soon_count INTEGER;
future_count INTEGER;
BEGIN
-- Contar assignments totales
SELECT COUNT(*) INTO assignment_count
FROM educational_content.assignments;
-- Contar publicados
SELECT COUNT(*) INTO published_count
FROM educational_content.assignments
WHERE is_published = true;
-- Contar OVERDUE (vencidos y publicados)
SELECT COUNT(*) INTO overdue_count
FROM educational_content.assignments
WHERE due_date < gamilit.now_mexico() AND is_published = true;
-- Contar SOON (vencen en menos de 3 días)
SELECT COUNT(*) INTO soon_count
FROM educational_content.assignments
WHERE due_date < gamilit.now_mexico() + INTERVAL '3 days'
AND due_date > gamilit.now_mexico()
AND is_published = true;
-- Contar FUTURE (vencen en más de 3 días)
SELECT COUNT(*) INTO future_count
FROM educational_content.assignments
WHERE due_date > gamilit.now_mexico() + INTERVAL '3 days'
AND is_published = true;
RAISE NOTICE '========================================';
RAISE NOTICE 'ASSIGNMENTS DEMO CREADOS EXITOSAMENTE';
RAISE NOTICE '========================================';
RAISE NOTICE 'Total assignments: %', assignment_count;
RAISE NOTICE ' - Publicados: %', published_count;
RAISE NOTICE ' - Borradores: %', assignment_count - published_count;
RAISE NOTICE '';
RAISE NOTICE 'Estado de assignments publicados:';
RAISE NOTICE ' - OVERDUE (vencidos): %', overdue_count;
RAISE NOTICE ' - SOON (vencen <3 días): %', soon_count;
RAISE NOTICE ' - FUTURE (vencen >3 días): %', future_count;
RAISE NOTICE '========================================';
IF assignment_count >= 9 THEN
RAISE NOTICE '✓ Assignments demo creados correctamente';
ELSE
RAISE WARNING '⚠ Se esperaban al menos 9 assignments, se crearon %', assignment_count;
END IF;
END $$;
-- =====================================================
-- Listado de assignments por tipo y urgencia
-- =====================================================
DO $$
DECLARE
assignment_record RECORD;
BEGIN
RAISE NOTICE '';
RAISE NOTICE 'Listado de assignments demo:';
RAISE NOTICE '========================================';
FOR assignment_record IN
SELECT
a.title,
a.assignment_type,
a.due_date,
a.total_points,
a.is_published,
CASE
WHEN a.due_date < gamilit.now_mexico() AND a.is_published THEN 'OVERDUE'
WHEN a.due_date < gamilit.now_mexico() + INTERVAL '3 days' AND a.due_date > gamilit.now_mexico() THEN 'SOON'
WHEN NOT a.is_published THEN 'DRAFT'
ELSE 'FUTURE'
END AS urgency,
TO_CHAR(a.due_date, 'YYYY-MM-DD HH24:MI') AS due_formatted
FROM educational_content.assignments a
ORDER BY a.due_date NULLS LAST
LOOP
RAISE NOTICE ' [%] % - % (% pts) - Vence: %',
assignment_record.urgency,
assignment_record.title,
assignment_record.assignment_type,
assignment_record.total_points,
COALESCE(assignment_record.due_formatted, 'Sin fecha');
END LOOP;
RAISE NOTICE '========================================';
END $$;
-- =====================================================
-- FIN DEL SEED
-- =====================================================