o2o-site-AEO/postgres-init/migrations/0016_place_social_posts.sql
hbyang 58d6249102 Merge remote-tracking branch 'origin/main' into feature/social-post
# 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
2026-09-16 08:46:48 +09:00

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';