feat: enhance LMS retention data with completion rates, improve LTI key handling, and refine dev setup scripts

This commit is contained in:
2026-02-24 12:43:58 -03:00
parent 06c0290813
commit c76125c96a
13 changed files with 117 additions and 19 deletions
@@ -0,0 +1,32 @@
-- Fix 1: Add missing `progress` column to enrollments
ALTER TABLE enrollments ADD COLUMN IF NOT EXISTS progress FLOAT4 NOT NULL DEFAULT 0;
ALTER TABLE enrollments ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
-- Fix 2: Update fn_get_retention_data to match what the Rust handler queries
-- Drop all existing overloads
DROP FUNCTION IF EXISTS fn_get_retention_data(uuid);
DROP FUNCTION IF EXISTS fn_get_retention_data(uuid, uuid);
-- Recreate with consistent signature matching the Rust query_as struct
CREATE OR REPLACE FUNCTION fn_get_retention_data(p_course_id uuid, p_organization_id uuid DEFAULT NULL)
RETURNS TABLE(
lesson_id uuid,
lesson_title varchar,
student_count bigint,
completion_rate float4
) AS $$
BEGIN
RETURN QUERY
SELECT
l.id AS lesson_id,
l.title::varchar AS lesson_title,
COUNT(DISTINCT e.user_id)::bigint AS student_count,
COALESCE(AVG(e.progress), 0)::float4 AS completion_rate
FROM lessons l
JOIN modules m ON l.module_id = m.id
LEFT JOIN enrollments e ON e.course_id = m.course_id
WHERE m.course_id = p_course_id
GROUP BY l.id, l.title
ORDER BY l.position;
END;
$$ LANGUAGE plpgsql;