workspace-v1/projects/gamilit/database/seeds/dev/progress_tracking/01-demo-progress.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

361 lines
12 KiB
SQL

-- =====================================================================================
-- SEED: Demo Progress Data for Progress Tracking Schema
-- =====================================================================================
-- Description: Module progress and learning sessions for demo students
-- Dependencies: auth.users, educational_content.modules, educational_content.exercises
-- Idempotency: Uses ON CONFLICT to handle re-runs safely
-- =====================================================================================
SET search_path TO progress_tracking, educational_content, auth, public;
-- =====================================================================================
-- MODULE PROGRESS & LEARNING SESSIONS
-- =====================================================================================
DO $$
DECLARE
student1_id UUID;
student2_id UUID;
student3_id UUID;
module1_id UUID;
module2_id UUID;
module3_id UUID;
BEGIN
-- ==================================================================================
-- GET USER IDS (Demo Students)
-- ==================================================================================
SELECT id INTO student1_id
FROM auth.users
WHERE email = 'estudiante1@demo.glit.edu.mx';
SELECT id INTO student2_id
FROM auth.users
WHERE email = 'estudiante2@demo.glit.edu.mx';
SELECT id INTO student3_id
FROM auth.users
WHERE email = 'estudiante3@demo.glit.edu.mx';
-- ==================================================================================
-- GET MODULE IDS (Marie Curie Modules)
-- ==================================================================================
SELECT id INTO module1_id
FROM educational_content.modules
WHERE module_code = 'MOD-01-LITERAL';
SELECT id INTO module2_id
FROM educational_content.modules
WHERE module_code = 'MOD-02-INFERENCIAL';
SELECT id INTO module3_id
FROM educational_content.modules
WHERE module_code = 'MOD-03-CRITICA';
-- ==================================================================================
-- MODULE PROGRESS: Student Progress Tracking
-- ==================================================================================
RAISE NOTICE 'Inserting module progress data...';
INSERT INTO progress_tracking.module_progress (
user_id, module_id,
status, progress_percentage,
completed_exercises, total_exercises,
total_score, max_possible_score,
time_spent, attempts_count,
started_at, last_accessed_at, completed_at,
metadata, created_at, updated_at
) VALUES
-- ================================================================================
-- ESTUDIANTE 1: Advanced Student (2 modules active)
-- ================================================================================
-- Module 1: COMPLETED (Perfect Performance)
(
student1_id, module1_id,
'completed', 100,
5, 5,
480, 500,
45, 8,
NOW() - INTERVAL '10 days',
NOW() - INTERVAL '3 days',
NOW() - INTERVAL '3 days',
'{
"average_score_percentage": 96,
"completion_time_days": 7,
"streak_days": 5,
"comodines_used": ["pistas", "vision_lectora"],
"performance_trend": "improving",
"mastery_level": "advanced"
}'::jsonb,
NOW() - INTERVAL '10 days',
NOW() - INTERVAL '3 days'
),
-- Module 2: IN PROGRESS (Good Progress)
(
student1_id, module2_id,
'in_progress', 60,
3, 5,
285, 500,
30, 5,
NOW() - INTERVAL '2 days',
NOW() - INTERVAL '1 hour',
NULL,
'{
"average_score_percentage": 95,
"current_exercise": 4,
"comodines_used": ["pistas"],
"estimated_completion_days": 2,
"difficulty_level": "intermediate"
}'::jsonb,
NOW() - INTERVAL '2 days',
NOW() - INTERVAL '1 hour'
),
-- ================================================================================
-- ESTUDIANTE 2: Intermediate Student (Completed Module 1, Advanced Module 3)
-- ================================================================================
-- Module 1: COMPLETED (Good Performance)
(
student2_id, module1_id,
'completed', 100,
5, 5,
425, 500,
60, 12,
NOW() - INTERVAL '15 days',
NOW() - INTERVAL '5 days',
NOW() - INTERVAL '5 days',
'{
"average_score_percentage": 85,
"completion_time_days": 10,
"streak_days": 3,
"comodines_used": ["pistas", "segunda_oportunidad"],
"performance_trend": "stable",
"retry_rate": 40
}'::jsonb,
NOW() - INTERVAL '15 days',
NOW() - INTERVAL '5 days'
),
-- Module 3: IN PROGRESS (Challenge Level - Advanced)
(
student2_id, module3_id,
'in_progress', 40,
2, 5,
160, 500,
25, 4,
NOW() - INTERVAL '1 day',
NOW() - INTERVAL '2 hours',
NULL,
'{
"average_score_percentage": 80,
"current_exercise": 3,
"difficulty": "advanced",
"skipped_module_2": false,
"teacher_recommendation": "review inferential reading first"
}'::jsonb,
NOW() - INTERVAL '1 day',
NOW() - INTERVAL '2 hours'
),
-- ================================================================================
-- ESTUDIANTE 3: Foundational Student (Needs Support)
-- ================================================================================
-- Module 1: IN PROGRESS (Slower Pace, More Support Needed)
(
student3_id, module1_id,
'in_progress', 40,
2, 5,
150, 500,
35, 6,
NOW() - INTERVAL '5 days',
NOW() - INTERVAL '3 hours',
NULL,
'{
"average_score_percentage": 75,
"current_exercise": 3,
"comodines_used": ["pistas", "pistas", "vision_lectora"],
"support_level": "foundational",
"hints_per_exercise_avg": 2.5,
"teacher_intervention_suggested": true
}'::jsonb,
NOW() - INTERVAL '5 days',
NOW() - INTERVAL '3 hours'
)
ON CONFLICT (user_id, module_id) DO UPDATE SET
status = EXCLUDED.status,
progress_percentage = EXCLUDED.progress_percentage,
completed_exercises = EXCLUDED.completed_exercises,
total_score = EXCLUDED.total_score,
time_spent = EXCLUDED.time_spent,
attempts_count = EXCLUDED.attempts_count,
last_accessed_at = EXCLUDED.last_accessed_at,
completed_at = EXCLUDED.completed_at,
metadata = EXCLUDED.metadata,
updated_at = NOW();
RAISE NOTICE 'Module progress data inserted successfully';
-- ==================================================================================
-- LEARNING SESSIONS: Study Session Tracking
-- ==================================================================================
RAISE NOTICE 'Inserting learning sessions data...';
INSERT INTO progress_tracking.learning_sessions (
user_id, module_id,
started_at, ended_at, duration,
exercises_attempted, exercises_completed,
metadata, created_at
) VALUES
-- ================================================================================
-- ESTUDIANTE 1: Recent Active Sessions
-- ================================================================================
-- Session 1: Recent Module 2 Study (Focused & Productive)
(
student1_id, module2_id,
NOW() - INTERVAL '1 hour',
NOW() - INTERVAL '30 minutes',
30,
1, 1,
95, ARRAY[]::text[],
ARRAY['pistas']::text[],
'study',
'{
"device": "laptop",
"location": "home",
"focus_score": 85,
"interruptions": 0,
"browser": "chrome",
"screen_time_active_percentage": 95
}'::jsonb,
NOW() - INTERVAL '30 minutes'
),
-- Session 2: Yesterday Module 2 Study
(
student1_id, module2_id,
NOW() - INTERVAL '25 hours',
NOW() - INTERVAL '24 hours',
45,
2, 2,
190, ARRAY['quick_learner']::text[],
ARRAY['vision_lectora']::text[],
'study',
'{
"device": "laptop",
"location": "library",
"focus_score": 92,
"interruptions": 0,
"achievement_earned": "quick_learner"
}'::jsonb,
NOW() - INTERVAL '24 hours'
),
-- ================================================================================
-- ESTUDIANTE 2: Module 3 Sessions (Challenging Content)
-- ================================================================================
-- Session 1: Module 3 Study (Moderate Focus)
(
student2_id, module3_id,
NOW() - INTERVAL '3 hours',
NOW() - INTERVAL '2 hours',
60,
2, 1,
80, ARRAY[]::text[],
ARRAY['segunda_oportunidad']::text[],
'study',
'{
"device": "tablet",
"location": "school",
"focus_score": 75,
"interruptions": 2,
"retry_used": true,
"difficulty_feedback": "challenging but manageable"
}'::jsonb,
NOW() - INTERVAL '2 hours'
),
-- Session 2: Module 3 Review Session
(
student2_id, module3_id,
NOW() - INTERVAL '27 hours',
NOW() - INTERVAL '26 hours',
40,
1, 0,
0, ARRAY[]::text[],
ARRAY['pistas', 'pistas']::text[],
'review',
'{
"device": "tablet",
"location": "home",
"focus_score": 70,
"interruptions": 1,
"review_mode": true,
"notes": "struggling with critical analysis concepts"
}'::jsonb,
NOW() - INTERVAL '26 hours'
),
-- ================================================================================
-- ESTUDIANTE 3: Module 1 Sessions (Needs Support)
-- ================================================================================
-- Session 1: Recent Study with Interruptions
(
student3_id, module1_id,
NOW() - INTERVAL '4 hours',
NOW() - INTERVAL '3 hours',
45,
2, 1,
70, ARRAY[]::text[],
ARRAY['pistas', 'vision_lectora']::text[],
'study',
'{
"device": "mobile",
"location": "home",
"focus_score": 60,
"interruptions": 3,
"hints_requested": 2,
"vocabulary_support_needed": true
}'::jsonb,
NOW() - INTERVAL '3 hours'
),
-- Session 2: Previous Study Session (Low Completion)
(
student3_id, module1_id,
NOW() - INTERVAL '2 days',
NOW() - INTERVAL '2 days' + INTERVAL '25 minutes',
25,
1, 0,
0, ARRAY[]::text[],
ARRAY['pistas', 'pistas']::text[],
'study',
'{
"device": "mobile",
"location": "bus",
"focus_score": 45,
"interruptions": 5,
"session_abandoned": true,
"reason": "connectivity issues"
}'::jsonb,
NOW() - INTERVAL '2 days' + INTERVAL '25 minutes'
)
ON CONFLICT DO NOTHING;
RAISE NOTICE 'Learning sessions data inserted successfully';
RAISE NOTICE '✓ Progress tracking seeds completed';
RAISE NOTICE ' - Module progress entries: 5';
RAISE NOTICE ' - Learning sessions: 6';
END $$;