-- =================================================================== -- social_upload 테이블 생성 마이그레이션 -- 소셜 미디어 업로드 기록을 저장하는 테이블 -- 생성일: 2026-02-02 -- =================================================================== -- social_upload 테이블 생성 CREATE TABLE IF NOT EXISTS social_upload ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '고유 식별자', -- 관계 필드 user_uuid VARCHAR(36) NOT NULL COMMENT '사용자 UUID (User.user_uuid 참조)', video_id INT NOT NULL COMMENT 'Video 외래키', social_account_id INT NOT NULL COMMENT 'SocialAccount 외래키', -- 플랫폼 정보 platform VARCHAR(20) NOT NULL COMMENT '플랫폼 구분 (youtube, instagram, facebook, tiktok)', -- 업로드 상태 status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '업로드 상태 (pending, uploading, processing, completed, failed)', upload_progress INT NOT NULL DEFAULT 0 COMMENT '업로드 진행률 (0-100)', -- 플랫폼 결과 platform_video_id VARCHAR(100) NULL COMMENT '플랫폼에서 부여한 영상 ID', platform_url VARCHAR(500) NULL COMMENT '플랫폼에서의 영상 URL', -- 메타데이터 title VARCHAR(200) NOT NULL COMMENT '영상 제목', description TEXT NULL COMMENT '영상 설명', tags JSON NULL COMMENT '태그 목록 (JSON 배열)', privacy_status VARCHAR(20) NOT NULL DEFAULT 'private' COMMENT '공개 상태 (public, unlisted, private)', platform_options JSON NULL COMMENT '플랫폼별 추가 옵션 (JSON)', -- 에러 정보 error_message TEXT NULL COMMENT '에러 메시지 (실패 시)', retry_count INT NOT NULL DEFAULT 0 COMMENT '재시도 횟수', -- 시간 정보 uploaded_at DATETIME NULL COMMENT '업로드 완료 시간', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시', updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 일시', -- 외래키 제약조건 CONSTRAINT fk_social_upload_user FOREIGN KEY (user_uuid) REFERENCES user(user_uuid) ON DELETE CASCADE, CONSTRAINT fk_social_upload_video FOREIGN KEY (video_id) REFERENCES video(id) ON DELETE CASCADE, CONSTRAINT fk_social_upload_account FOREIGN KEY (social_account_id) REFERENCES social_account(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='소셜 미디어 업로드 기록 테이블'; -- 인덱스 생성 CREATE INDEX idx_social_upload_user_uuid ON social_upload(user_uuid); CREATE INDEX idx_social_upload_video_id ON social_upload(video_id); CREATE INDEX idx_social_upload_social_account_id ON social_upload(social_account_id); CREATE INDEX idx_social_upload_platform ON social_upload(platform); CREATE INDEX idx_social_upload_status ON social_upload(status); CREATE INDEX idx_social_upload_created_at ON social_upload(created_at); -- 유니크 인덱스 (동일 영상 + 동일 계정 조합은 하나만 존재) CREATE UNIQUE INDEX uq_social_upload_video_platform ON social_upload(video_id, social_account_id);