DDL schemas for Trading Platform: - User management - Authentication - Payments - Education - ML predictions - Trading data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
58 lines
1.9 KiB
PL/PgSQL
58 lines
1.9 KiB
PL/PgSQL
-- =====================================================
|
|
-- FUNCTION: education.update_enrollment_progress()
|
|
-- =====================================================
|
|
-- Proyecto: OrbiQuant IA (Trading Platform)
|
|
-- Módulo: OQI-002 - Education
|
|
-- Especificación: ET-EDU-001-database.md
|
|
-- Descripción: Actualiza el progreso del enrollment cuando se completa una lección
|
|
-- =====================================================
|
|
|
|
CREATE OR REPLACE FUNCTION education.update_enrollment_progress()
|
|
RETURNS TRIGGER AS $$
|
|
DECLARE
|
|
v_total_lessons INTEGER;
|
|
v_completed_lessons INTEGER;
|
|
v_progress_percentage DECIMAL(5,2);
|
|
BEGIN
|
|
-- Obtener total de lecciones obligatorias del curso
|
|
SELECT COUNT(*)
|
|
INTO v_total_lessons
|
|
FROM education.lessons l
|
|
JOIN education.modules m ON l.module_id = m.id
|
|
JOIN education.courses c ON m.course_id = c.id
|
|
WHERE c.id = (
|
|
SELECT course_id FROM education.enrollments WHERE id = NEW.enrollment_id
|
|
) AND l.is_mandatory = true;
|
|
|
|
-- Obtener lecciones completadas
|
|
SELECT COUNT(*)
|
|
INTO v_completed_lessons
|
|
FROM education.progress
|
|
WHERE enrollment_id = NEW.enrollment_id
|
|
AND is_completed = true;
|
|
|
|
-- Calcular porcentaje de progreso
|
|
v_progress_percentage := (v_completed_lessons::DECIMAL / NULLIF(v_total_lessons, 0)::DECIMAL) * 100;
|
|
|
|
-- Actualizar enrollment
|
|
UPDATE education.enrollments
|
|
SET
|
|
progress_percentage = COALESCE(v_progress_percentage, 0),
|
|
completed_lessons = v_completed_lessons,
|
|
total_lessons = v_total_lessons,
|
|
updated_at = NOW()
|
|
WHERE id = NEW.enrollment_id;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
COMMENT ON FUNCTION education.update_enrollment_progress() IS 'Actualiza progreso del enrollment al completar lecciones';
|
|
|
|
-- Trigger para actualizar el progreso
|
|
CREATE TRIGGER update_enrollment_on_progress
|
|
AFTER INSERT OR UPDATE ON education.progress
|
|
FOR EACH ROW
|
|
WHEN (NEW.is_completed = true)
|
|
EXECUTE FUNCTION education.update_enrollment_progress();
|