-- 通知系统主表 + 统计表
-- 创建时间: 2026-06-16
-- 关联: spec §4.1

-- 1. 通知主表
CREATE TABLE IF NOT EXISTS public.notifications (
    id          BIGSERIAL PRIMARY KEY,
    user_id     BIGINT NOT NULL,
    star_id     BIGINT NOT NULL,
    type        VARCHAR(20) NOT NULL,         -- like / system / activity
    title       VARCHAR(200) NOT NULL,
    content     VARCHAR(500),
    data        JSONB,
    is_read     BOOLEAN NOT NULL DEFAULT FALSE,
    is_deleted  BOOLEAN NOT NULL DEFAULT FALSE,
    created_at  BIGINT NOT NULL,
    read_at     BIGINT
);

-- 2. 索引
CREATE INDEX IF NOT EXISTS idx_notifications_user_type_created
    ON public.notifications (user_id, star_id, type, created_at DESC);

CREATE INDEX IF NOT EXISTS idx_notifications_user_unread
    ON public.notifications (user_id, star_id, is_read, created_at DESC)
    WHERE is_deleted = FALSE;

-- 3. 通知统计表
CREATE TABLE IF NOT EXISTS public.notification_stats (
    user_id               BIGINT NOT NULL,
    star_id               BIGINT NOT NULL,
    like_unread_count     INT NOT NULL DEFAULT 0,
    system_unread_count   INT NOT NULL DEFAULT 0,
    activity_unread_count INT NOT NULL DEFAULT 0,
    total_unread_count    INT NOT NULL DEFAULT 0,
    updated_at            BIGINT NOT NULL,
    PRIMARY KEY (user_id, star_id)
);

-- 4. 序列起始值预留 10000（CLAUDE.md 数据库规范）
ALTER SEQUENCE notifications_id_seq RESTART WITH 10000;
