Replace rename-based lesson migration with additive sub_module_lessons creation, preserve sub_module_practices as its own model, and enforce QUIZ/PRACTICE filtering in hierarchy reads to prevent cross-mixing. Made-with: Cursor
36 lines
1.2 KiB
SQL
36 lines
1.2 KiB
SQL
CREATE TABLE IF NOT EXISTS sub_module_practices (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
sub_module_id BIGINT NOT NULL REFERENCES sub_modules(id) ON DELETE CASCADE,
|
|
title VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
thumbnail TEXT,
|
|
intro_video_url TEXT,
|
|
question_set_id BIGINT NOT NULL REFERENCES question_sets(id) ON DELETE CASCADE,
|
|
display_order INT NOT NULL DEFAULT 0,
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(question_set_id)
|
|
);
|
|
|
|
-- If the table already existed from older unified hierarchy migrations,
|
|
-- backfill missing columns so practices keep their own richer schema.
|
|
ALTER TABLE sub_module_practices
|
|
ADD COLUMN IF NOT EXISTS title VARCHAR(255);
|
|
|
|
ALTER TABLE sub_module_practices
|
|
ADD COLUMN IF NOT EXISTS description TEXT;
|
|
|
|
ALTER TABLE sub_module_practices
|
|
ADD COLUMN IF NOT EXISTS thumbnail TEXT;
|
|
|
|
UPDATE sub_module_practices
|
|
SET title = COALESCE(NULLIF(title, ''), 'Practice')
|
|
WHERE title IS NULL OR title = '';
|
|
|
|
ALTER TABLE sub_module_practices
|
|
ALTER COLUMN title SET NOT NULL;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_sub_module_practices_sub_module_id
|
|
ON sub_module_practices(sub_module_id);
|
|
|