Yimaru-BackEnd/db/migrations/000077_lms_one_practice_per_parent.up.sql
Yared Yemane 8dd1d40a16 feat: limit Learn English parents to one LMS practice each
Reject creating a second practice on the same course, module, or lesson with 409 Conflict, and enforce the rule in the database via unique partial indexes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 04:28:14 -07:00

32 lines
928 B
SQL

-- Learn English: at most one lms_practice per course, module, or lesson parent.
-- Remove duplicate rows (keep the earliest practice per parent) before adding constraints.
DELETE FROM lms_practices a
USING lms_practices b
WHERE a.course_id IS NOT NULL
AND a.course_id = b.course_id
AND a.id > b.id;
DELETE FROM lms_practices a
USING lms_practices b
WHERE a.module_id IS NOT NULL
AND a.module_id = b.module_id
AND a.id > b.id;
DELETE FROM lms_practices a
USING lms_practices b
WHERE a.lesson_id IS NOT NULL
AND a.lesson_id = b.lesson_id
AND a.id > b.id;
CREATE UNIQUE INDEX idx_lms_practices_one_per_course
ON lms_practices (course_id)
WHERE course_id IS NOT NULL;
CREATE UNIQUE INDEX idx_lms_practices_one_per_module
ON lms_practices (module_id)
WHERE module_id IS NOT NULL;
CREATE UNIQUE INDEX idx_lms_practices_one_per_lesson
ON lms_practices (lesson_id)
WHERE lesson_id IS NOT NULL;