-- 298_study_reminders.sql
-- 알람 재료 append-only 원장. study_reminder cron(09/13/19 KST)이 발화 시 1행 INSERT,
--   GET /reminders/latest 가 읽는다. UPDATE/DELETE 없음.
-- fired_at 은 발화 시각의 '시간 슬롯' 으로 truncate 해서 박는다 (raw now() 마이크로초면
--   UNIQUE 가 사실상 안 걸려 멱등 무효). UNIQUE(user_id, fired_at) + on_conflict_do_nothing.
-- study_topic_id ON DELETE SET NULL: 토픽 삭제돼도 과거 알람 이력 보존(CASCADE 아님).

CREATE TABLE IF NOT EXISTS study_reminders (
    id                 BIGSERIAL    PRIMARY KEY,
    user_id            BIGINT       NOT NULL REFERENCES users(id)        ON DELETE CASCADE,
    study_topic_id     BIGINT       REFERENCES study_topics(id)          ON DELETE SET NULL,
    due_count          INTEGER,
    focus_topic_names  JSONB,
    fired_at           TIMESTAMPTZ  NOT NULL,
    created_at         TIMESTAMPTZ  NOT NULL DEFAULT now(),

    CONSTRAINT uq_study_reminders_user_fired UNIQUE (user_id, fired_at)
);
