# Conflicts: # docs/DECISIONS.md # docs/DEVLOG.md # solution/backend/requirements.txt # solution/backend/scheduler/__init__.py # solution/backend/worker/handlers.py # solution/site/src/pages/HomePage.tsx # solution/site/src/sections/index.ts
35 lines
1.7 KiB
SQL
35 lines
1.7 KiB
SQL
-- 0016 · SNS 게재 글
|
|
--
|
|
-- ★ 번호가 0012·0013 이었는데 main 에 같은 번호가 이미 있어서(0012_place_faqs_template_source,
|
|
-- 0013_job_progress) 병합하며 뒤로 밀었다. migrate.py 는 파일명 정렬로 돌고 적용 이력도
|
|
-- 파일명(stem)으로 남기므로, 이미 옛 이름으로 적용된 DB 는 이 파일을 한 번 더 돌린다 —
|
|
-- 안에 있는 문장이 전부 IF NOT EXISTS 라 두 번 돌아도 결과가 같다(그래서 밀 수 있었다).
|
|
CREATE TABLE IF NOT EXISTS public.place_social_posts (
|
|
post_id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
place_id uuid NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
site_version_id uuid NOT NULL,
|
|
account_id uuid,
|
|
provider smallint NOT NULL CHECK (provider IN (1,2)),
|
|
body text NOT NULL DEFAULT '',
|
|
link_url text NOT NULL,
|
|
grounded_facts jsonb NOT NULL DEFAULT '[]',
|
|
status varchar(24) NOT NULL DEFAULT 'DRAFTING',
|
|
approval_token_sha varchar(64),
|
|
approval_sent_at timestamptz,
|
|
approval_channel varchar(20),
|
|
approval_expires_at timestamptz,
|
|
decided_at timestamptz,
|
|
decided_via varchar(20),
|
|
provider_post_id varchar(200),
|
|
permalink text,
|
|
posted_at timestamptz,
|
|
last_error text,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
deleted boolean NOT NULL DEFAULT false
|
|
);
|
|
-- 게시 성공 뒤의 이중 클릭도 막는다. 같은 버전은 기존 초안을 재사용한다.
|
|
CREATE UNIQUE INDEX IF NOT EXISTS uq_social_version ON public.place_social_posts(place_id, site_version_id) WHERE deleted=false;
|
|
CREATE INDEX IF NOT EXISTS idx_social_posted ON public.place_social_posts(place_id, posted_at DESC) WHERE deleted=false AND status='POSTED';
|