20 lines
1017 B
SQL
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";
|