-- 188_study_question_attempts.sql (3/5)
-- 복습모드에서 답 제출할 때마다 1행 누적. 통계·오답노트의 토대.
--
-- FK 정책 (이력 보존 원칙):
--   - study_question_id ON DELETE RESTRICT — 문제 삭제는 API 에서 soft delete 만 수행.
--     hard delete 실수로 풀이 이력이 사라지면 안 되기 때문에 DB 레벨에서도 막는다. CASCADE 금지.
--   - study_topic_id ON DELETE CASCADE — 토픽 삭제는 워크스페이스 전체 폐기 의미.
--     단 PR-1 의 토픽 삭제도 soft delete 라 실 cascade 발생은 hard delete 시.
--   - user_id ON DELETE CASCADE — 사용자 탈퇴 정리.
--
-- correct_choice 컬럼은 attempt 시점 정답을 그대로 보존 — 문제 편집으로 정답 변경되어도
-- 기존 attempt 의 is_correct 는 재계산 안 함 (기록은 시점 사실).
-- selected_choice/correct_choice 모두 SMALLINT CHECK 1~4.

CREATE TABLE IF NOT EXISTS study_question_attempts (
    id                  BIGSERIAL PRIMARY KEY,
    user_id             BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    study_question_id   BIGINT NOT NULL REFERENCES study_questions(id) ON DELETE RESTRICT,
    study_topic_id      BIGINT NOT NULL REFERENCES study_topics(id) ON DELETE CASCADE,
    selected_choice     SMALLINT NOT NULL CHECK (selected_choice BETWEEN 1 AND 4),
    correct_choice      SMALLINT NOT NULL CHECK (correct_choice BETWEEN 1 AND 4),
    is_correct          BOOLEAN NOT NULL,
    answered_at         TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
