trading-platform-database/ddl/schemas/education/functions/06-update_enrollment_count.sql

42 lines
1.3 KiB
PL/PgSQL

-- =====================================================
-- FUNCTION: education.update_enrollment_count()
-- =====================================================
-- Proyecto: OrbiQuant IA (Trading Platform)
-- Módulo: OQI-002 - Education
-- Especificación: ET-EDU-001-database.md
-- Descripción: Actualiza el contador de enrollments en courses
-- =====================================================
CREATE OR REPLACE FUNCTION education.update_enrollment_count()
RETURNS TRIGGER AS $$
DECLARE
v_course_id UUID;
BEGIN
v_course_id := COALESCE(NEW.course_id, OLD.course_id);
-- Actualizar contador de enrollments
UPDATE education.courses
SET
total_enrollments = (
SELECT COUNT(*) FROM education.enrollments WHERE course_id = v_course_id
),
updated_at = NOW()
WHERE id = v_course_id;
RETURN COALESCE(NEW, OLD);
END;
$$ LANGUAGE plpgsql;
COMMENT ON FUNCTION education.update_enrollment_count() IS 'Actualiza total_enrollments del curso';
-- Triggers para actualizar contador
CREATE TRIGGER update_enrollment_count_on_insert
AFTER INSERT ON education.enrollments
FOR EACH ROW
EXECUTE FUNCTION education.update_enrollment_count();
CREATE TRIGGER update_enrollment_count_on_delete
AFTER DELETE ON education.enrollments
FOR EACH ROW
EXECUTE FUNCTION education.update_enrollment_count();