Yimaru-BackEnd/db/migrations/000006_unified_questions.down.sql

96 lines
3.3 KiB
SQL

-- Revert unified questions migration
-- This will recreate the old tables but data migration back is not supported
-- Recreate assessment tables
CREATE TABLE IF NOT EXISTS assessment_questions (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
question_type VARCHAR(30) NOT NULL CHECK (question_type IN ('MULTIPLE_CHOICE', 'SHORT_ANSWER', 'TRUE_FALSE')),
difficulty_level TEXT,
points INT NOT NULL DEFAULT 1,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS assessment_question_options (
id BIGSERIAL PRIMARY KEY,
question_id BIGINT NOT NULL REFERENCES assessment_questions(id) ON DELETE CASCADE,
option_text TEXT NOT NULL,
option_order INT NOT NULL DEFAULT 0,
is_correct BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS assessment_short_answers (
id BIGSERIAL PRIMARY KEY,
question_id BIGINT NOT NULL REFERENCES assessment_questions(id) ON DELETE CASCADE,
correct_answer TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS assessment_attempts (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total_questions INT NOT NULL,
total_points INT NOT NULL,
score INT,
percentage NUMERIC(5,2),
status VARCHAR(20) NOT NULL DEFAULT 'IN_PROGRESS',
started_at TIMESTAMPTZ,
submitted_at TIMESTAMPTZ,
evaluated_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS assessment_attempt_questions (
id BIGSERIAL PRIMARY KEY,
attempt_id BIGINT NOT NULL REFERENCES assessment_attempts(id) ON DELETE CASCADE,
question_id BIGINT NOT NULL REFERENCES assessment_questions(id),
question_type VARCHAR(30) NOT NULL,
points INT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS assessment_attempt_answers (
id BIGSERIAL PRIMARY KEY,
attempt_id BIGINT NOT NULL REFERENCES assessment_attempts(id) ON DELETE CASCADE,
question_id BIGINT NOT NULL REFERENCES assessment_questions(id),
selected_option_id BIGINT,
submitted_text TEXT,
is_correct BOOLEAN,
awarded_points INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Recreate practices tables
CREATE TABLE IF NOT EXISTS practices (
id BIGSERIAL PRIMARY KEY,
sub_course_id BIGINT,
title VARCHAR(255) NOT NULL,
description TEXT,
banner_image TEXT,
persona VARCHAR(100),
status VARCHAR(20) NOT NULL DEFAULT 'DRAFT'
);
CREATE TABLE IF NOT EXISTS practice_questions (
id BIGSERIAL PRIMARY KEY,
practice_id BIGINT NOT NULL REFERENCES practices(id) ON DELETE CASCADE,
question TEXT NOT NULL,
question_voice_prompt TEXT,
sample_answer_voice_prompt TEXT,
sample_answer TEXT,
tips TEXT,
type VARCHAR(50) NOT NULL
);
-- Drop new unified tables
DROP TABLE IF EXISTS question_set_items CASCADE;
DROP TABLE IF EXISTS question_sets CASCADE;
DROP TABLE IF EXISTS question_short_answers CASCADE;
DROP TABLE IF EXISTS question_options CASCADE;
DROP TABLE IF EXISTS questions CASCADE;