-- 创作知识 · 过程库建表 DDL
-- 目标实例：open_aigc（阿里云 AnalyticDB for PostgreSQL / Greenplum 7.0.0，PG12 内核，新加坡）
-- 连接：OPEN_AIGC_PG_*（用户 aiddit_aigc 已确认有 CREATE 权限）
--
-- Greenplum 注意事项：
--   1. 每张表需 DISTRIBUTED BY；主键/唯一键必须包含分布列。
--   2. 不依赖外键强约束（Greenplum 不强制 FK），post_id ↔ ck_post.id 的关系由应用维护。
--   3. updated_at 由应用在更新时写入（不用触发器，保持简单）。
--   4. 本实例无 pgvector；embedding 一期不做，需要时另议（非 pgvector 路线）。

CREATE SCHEMA IF NOT EXISTS creation_knowledge;
SET search_path TO creation_knowledge;

-- 每帖一行：各环节产物存 JSONB，stage 记录处理到哪一步
CREATE TABLE IF NOT EXISTS ck_post (
    id          text        NOT NULL,                 -- xhs_<content_id>，同帖唯一，复用为 ingest source.id
    platform    text,                                 -- xiaohongshu 等
    url         text,                                 -- 原始链接
    raw         jsonb,                                 -- fetch_post_detail 原始响应
    cards       jsonb,                                 -- 统一卡片列表 [{index,kind,url,timestamp}]（图/帧）
    extracted   jsonb,                                -- extract_content 多模态产物
    screening   jsonb,                                -- screen_post 结果 {passed,score,reason}
    stage       text        NOT NULL DEFAULT 'fetched', -- fetched/extracted/screened/split/done/rejected/failed
    created_at  timestamptz NOT NULL DEFAULT now(),
    updated_at  timestamptz NOT NULL DEFAULT now(),
    PRIMARY KEY (id)
) DISTRIBUTED BY (id);

CREATE INDEX IF NOT EXISTS idx_ck_post_stage    ON ck_post (stage);
CREATE INDEX IF NOT EXISTS idx_ck_post_platform ON ck_post (platform);

-- 每条知识片段一行：拆分+解构产物，以及组装好的 ingest payload（开发期的最终落点）
CREATE TABLE IF NOT EXISTS ck_knowledge_item (
    id              bigserial,                          -- 片段自增 ID
    post_id         text        NOT NULL,               -- → ck_post.id（同帖多片段复用同一 source）
    item            jsonb,                              -- 拆分结果 title/knowledge_types/what/why/how/evidence
    deconstruction  jsonb,                              -- 解构结果 stages/scopes/reason
    ingest_payload  jsonb,                              -- 组装后的 ingest 请求体（开发期最终产物）
    ingest_status   text        NOT NULL DEFAULT 'pending', -- pending(未发送) / ingested / failed
    knowledge_id    text,                               -- ingest API 返回的知识 ID（上线后才有）
    created_at      timestamptz NOT NULL DEFAULT now(),
    updated_at      timestamptz NOT NULL DEFAULT now(),
    PRIMARY KEY (id)
) DISTRIBUTED BY (id);

CREATE INDEX IF NOT EXISTS idx_ck_item_post   ON ck_knowledge_item (post_id);
CREATE INDEX IF NOT EXISTS idx_ck_item_status ON ck_knowledge_item (ingest_status);

-- 迁移（表已存在时补列，幂等）：卡片溯源
ALTER TABLE ck_post ADD COLUMN IF NOT EXISTS cards jsonb;

-- 回滚：DROP SCHEMA creation_knowledge CASCADE;
