-- Tear down the legacy course / learning-tree schema so a new hierarchy can be introduced. BEGIN; -- Entry-assessment automation on sub_courses (from 000024) DROP TRIGGER IF EXISTS trg_sub_courses_create_entry_assessment ON sub_courses; DROP FUNCTION IF EXISTS create_sub_course_entry_assessment(); DROP FUNCTION IF EXISTS clone_default_initial_assessment_items(BIGINT); DROP INDEX IF EXISTS idx_question_sets_unique_subcourse_initial_assessment; ALTER TABLE question_sets DROP COLUMN IF EXISTS sub_course_video_id; -- Dependent objects first DROP TABLE IF EXISTS user_sub_course_video_progress CASCADE; DROP TABLE IF EXISTS user_practice_progress CASCADE; DROP TABLE IF EXISTS sub_course_prerequisites CASCADE; DROP TABLE IF EXISTS user_sub_course_progress CASCADE; DROP TABLE IF EXISTS sub_module_practices CASCADE; DROP TABLE IF EXISTS sub_module_capstones CASCADE; DROP TABLE IF EXISTS sub_module_lessons CASCADE; DROP TABLE IF EXISTS sub_module_videos CASCADE; DROP TABLE IF EXISTS sub_modules CASCADE; DROP TABLE IF EXISTS module_capstones CASCADE; DROP TABLE IF EXISTS modules CASCADE; DROP TABLE IF EXISTS levels CASCADE; DROP TABLE IF EXISTS sub_course_videos CASCADE; DROP TABLE IF EXISTS sub_courses CASCADE; DROP TABLE IF EXISTS course_sub_categories CASCADE; DROP TABLE IF EXISTS courses CASCADE; DROP TABLE IF EXISTS course_categories CASCADE; -- Keep learner practice completion for the questions system (no sub_course column) CREATE TABLE user_practice_progress ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, question_set_id BIGINT NOT NULL REFERENCES question_sets(id) ON DELETE CASCADE, completed_at TIMESTAMPTZ, updated_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE (user_id, question_set_id) ); CREATE INDEX idx_user_practice_progress_user_id ON user_practice_progress(user_id); COMMIT;