Files
lms-be/prisma/migrations/20260909060000_group_course_scope/migration.sql
T

20 lines
1017 B
SQL

ALTER TABLE "student_groups" ADD COLUMN "course_id" UUID;
CREATE INDEX "student_groups_course_id_idx" ON "student_groups"("course_id");
ALTER TABLE "student_groups" ADD CONSTRAINT "student_groups_course_id_fkey"
FOREIGN KEY ("course_id") REFERENCES "courses"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- Preserve only unambiguous historical course associations. Empty groups without
-- curriculum history cannot be attributed to an instructor safely.
WITH candidates AS (
SELECT "group_id", "course_id" FROM "instructor_curriculum_settings" WHERE "group_id" IS NOT NULL
UNION
SELECT m."group_id", e."course_id"
FROM "student_group_members" m
JOIN "student_enrollments" e ON e."user_id" = m."user_id" AND e."status" = 'ACTIVE'
), unique_courses AS (
SELECT "group_id", MIN("course_id"::text)::uuid AS "course_id"
FROM candidates GROUP BY "group_id" HAVING COUNT(DISTINCT "course_id") = 1
)
UPDATE "student_groups" g SET "course_id" = c."course_id"
FROM unique_courses c WHERE g."id" = c."group_id";