-- 371_publish_outbox.sql
-- transactional outbox — 저작/4-A 트랜잭션이 같은 tx에서 여기 INSERT(P0-1 규율),
--   단일 발행 워커가 id(커밋순) 순으로 drain 하며 published 에 rev 부여(소스 updated_at 폴링 금지=갭 재발).
--   processed_at = 워커 drain 시 스탬프(NULL=미처리). payload/hash 는 enqueue 시점 스냅샷.
CREATE TABLE IF NOT EXISTS publish_outbox (
    id             BIGSERIAL    PRIMARY KEY,
    kind           VARCHAR(40)  NOT NULL,
    source_id      BIGINT       NOT NULL,
    payload        JSONB        NOT NULL,
    payload_hash   TEXT         NOT NULL,
    schema_version SMALLINT     NOT NULL DEFAULT 1,
    deleted        BOOLEAN      NOT NULL DEFAULT false,
    created_at     TIMESTAMPTZ  NOT NULL DEFAULT now(),
    processed_at   TIMESTAMPTZ
);
