89 lines
6.6 KiB
SQL
89 lines
6.6 KiB
SQL
-- ============================================================
|
|
-- Migration: P2V(무빙 포스터 F1 / 포스터 스타일링 F2) 잡 테이블 추가
|
|
-- Date: 2026-08-25
|
|
-- Description: P2V 서버에는 사용자 개념이 없어 castad 가 소유권을 들고,
|
|
-- 크레딧 선차감·환불과 Azure Blob 아카이브 URL 을 함께 보관한다.
|
|
-- 파이프라인마다 과정·산출물이 달라 테이블을 나눴다.
|
|
-- 테이블명은 산출물 종류를 따른다 — F1(포스터→영상)은 p2v_video,
|
|
-- F2(포스터 스타일링)는 p2v_poster. "F1/F2"는 P2V 서버 자체 API
|
|
-- 경로(/api/f1/*, /api/f2/*)를 가리킬 때만 코드·주석에 남는다.
|
|
-- 선행 조건: migration_2026-04-29_add_credit_tables.sql 먼저 실행
|
|
-- 비고: credit_transaction 은 스키마 변경 없이 재사용한다
|
|
-- (job_type='p2v_f1'|'p2v_f2', job_ref=이 테이블의 id).
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS p2v_video (
|
|
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '고유 식별자 (크레딧 원장 job_ref 앵커)',
|
|
user_uuid VARCHAR(36) NOT NULL COMMENT '생성 요청한 사용자 UUID',
|
|
p2v_job_id VARCHAR(64) NULL COMMENT 'P2V 서버가 발급한 잡 id(F1). 서버 호출 성공 후 채워진다',
|
|
name VARCHAR(100) NULL COMMENT '사용자가 입력한 행사명 (비우면 서버가 포스터에서 추출)',
|
|
status VARCHAR(20) NOT NULL DEFAULT 'queued' COMMENT '상태 (queued/running/awaiting_review/archiving/done/failed)',
|
|
credit_amount INT NOT NULL DEFAULT 0 COMMENT '차감한 크레딧 수량 (환불 금액 결정)',
|
|
|
|
-- 산출물 (Blob 업로드 후 채워짐). 명명은 ssul_content 관례를 따른다:
|
|
-- poster_url = 커버/썸네일(SNS 공유 og:image 역할), 원본은 source_*, 결과물은 파이프라인 접두.
|
|
p2v_video_url VARCHAR(500) NULL COMMENT '완성 영상 Blob URL',
|
|
poster_url VARCHAR(500) NULL COMMENT '썸네일 Blob URL (SNS 공유 og:image 역할, ssul_content.poster_url 관례)',
|
|
source_image_url VARCHAR(500) NULL COMMENT '원본 업로드 포스터 Blob URL',
|
|
|
|
-- 확정 메타데이터 (검수에서 사용자가 수정한 최종본만 보관)
|
|
event_name VARCHAR(200) NULL COMMENT '행사명',
|
|
date_text VARCHAR(100) NULL COMMENT '일시 표기',
|
|
place VARCHAR(200) NULL COMMENT '장소',
|
|
keywords JSON NULL COMMENT '키워드 목록',
|
|
narration JSON NULL COMMENT '나레이션 3문장',
|
|
duration DECIMAL(6,2) NULL COMMENT '완성 영상 길이(초)',
|
|
|
|
error VARCHAR(1000) NULL COMMENT '실패 사유 (스테이지 + detail)',
|
|
archived_at DATETIME NULL COMMENT 'Blob 업로드 완료 일시. NULL 이면 아직 P2V 에만 있음',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 일시',
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_p2v_video_user FOREIGN KEY (user_uuid) REFERENCES `user`(user_uuid) ON DELETE CASCADE,
|
|
UNIQUE KEY uq_p2v_video_ref (p2v_job_id),
|
|
INDEX idx_p2v_video_user_created (user_uuid, created_at),
|
|
INDEX idx_p2v_video_status (status)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
COMMENT='P2V F1 — 무빙 포스터(포스터→영상) 잡';
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS p2v_poster (
|
|
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '고유 식별자 (크레딧 원장 job_ref 앵커)',
|
|
user_uuid VARCHAR(36) NOT NULL COMMENT '생성 요청한 사용자 UUID',
|
|
p2v_job_id VARCHAR(64) NULL COMMENT 'P2V 서버가 발급한 잡 id(F2)',
|
|
name VARCHAR(100) NULL COMMENT '포스터 이름 (업로드 파일명에서 추출). 내 콘텐츠 카드 제목',
|
|
source_video_id BIGINT NULL COMMENT '원본 p2v_video 잡 (P2V source_slug 대응). 독립 잡이면 NULL',
|
|
status VARCHAR(20) NOT NULL DEFAULT 'queued' COMMENT '상태 (queued/running/archiving/done/failed)',
|
|
credit_amount INT NOT NULL DEFAULT 0 COMMENT '차감한 크레딧 수량',
|
|
|
|
-- 입력 스냅샷 (템플릿이 삭제돼도 이력이 남아야 한다)
|
|
template_id VARCHAR(64) NOT NULL COMMENT '사용한 스타일 템플릿 id',
|
|
template_name VARCHAR(100) NULL COMMENT '템플릿 이름 스냅샷',
|
|
license VARCHAR(20) NULL COMMENT '템플릿 배포 등급 (public-domain/internal-only/user-uploaded). 외부 공개 가부 판단',
|
|
format VARCHAR(16) NOT NULL DEFAULT 'poster' COMMENT '출력 포맷 (poster/story/feed/square)',
|
|
|
|
-- 산출물 (명명은 p2v_video와 동일 관례)
|
|
p2v_poster_url VARCHAR(500) NULL COMMENT '스타일 변환 결과 Blob URL',
|
|
source_image_url VARCHAR(500) NULL COMMENT '원본 업로드 포스터 Blob URL',
|
|
|
|
error VARCHAR(1000) NULL COMMENT '실패 사유',
|
|
archived_at DATETIME NULL COMMENT 'Blob 업로드 완료 일시',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 일시',
|
|
PRIMARY KEY (id),
|
|
CONSTRAINT fk_p2v_poster_user FOREIGN KEY (user_uuid) REFERENCES `user`(user_uuid) ON DELETE CASCADE,
|
|
CONSTRAINT fk_p2v_poster_source FOREIGN KEY (source_video_id) REFERENCES p2v_video(id) ON DELETE SET NULL,
|
|
UNIQUE KEY uq_p2v_poster_ref (p2v_job_id),
|
|
INDEX idx_p2v_poster_user_created (user_uuid, created_at),
|
|
INDEX idx_p2v_poster_status (status),
|
|
INDEX idx_p2v_poster_source (source_video_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
COMMENT='P2V F2 — 포스터 스타일링 잡';
|
|
|
|
|
|
-- ============================================================
|
|
-- 롤백
|
|
-- ============================================================
|
|
-- DROP TABLE IF EXISTS p2v_poster; -- FK 때문에 poster 를 먼저 지운다
|
|
-- DROP TABLE IF EXISTS p2v_video;
|