-- 0010 · 숙소의 노래 표(place_songs) -- -- 발행할 때마다 이 숙소의 노래를 한 곡 만든다 — 가사는 Gemini, 작곡은 Suno. -- 곡은 **사실이 아니라 창작물**이라 fact·사진 같은 검증 상태(FactStatus)를 두지 않는다. -- 대신 상태는 "만들어졌는가" 하나다: 1=generating · 2=ready · 3=failed. -- ★ 사이트에는 2 만 나간다. 생성 중인 곡을 실으면 재생 버튼이 없는 파일을 가리킨다. -- -- ★ origin_url 을 그대로 싣지 않는 이유: Suno 가 주는 주소는 만료된다. 받아서 우리 쪽에 -- 보관한 파일(file_name)만 사이트에 나간다 — 안 그러면 몇 주 뒤 조용히 재생이 죽는다. CREATE TABLE IF NOT EXISTS public.place_songs ( song_id uuid PRIMARY KEY DEFAULT gen_random_uuid(), place_id uuid NOT NULL, title VARCHAR(200) NOT NULL, lyrics TEXT NULL, style VARCHAR(200) NULL, provider VARCHAR(40) NOT NULL DEFAULT 'suno', provider_task_id VARCHAR(120) NULL, origin_url VARCHAR(1000) NULL, file_name VARCHAR(200) NULL, duration_sec NUMERIC(6,2) NULL, status SMALLINT NOT NULL DEFAULT 1, last_error TEXT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), deleted BOOLEAN NOT NULL DEFAULT FALSE ); -- 한 업장의 최신 곡을 꺼내는 경로. 발행본은 늘 "가장 최근에 완성된 한 곡"을 싣는다. CREATE INDEX IF NOT EXISTS idx_songs_place ON public.place_songs (place_id, created_at DESC);