-- =================================================================== -- dashboard 테이블 생성 마이그레이션 -- 채널별 영상 업로드 기록을 저장하는 테이블 -- SocialUpload.social_account_id는 재연동 시 변경되므로, -- 채널 ID(platform_user_id) 기준으로 안정적인 영상 필터링을 제공합니다. -- 생성일: 2026-02-24 -- =================================================================== -- dashboard 테이블 생성 CREATE TABLE IF NOT EXISTS dashboard ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '고유 식별자', -- 관계 필드 user_uuid VARCHAR(36) NOT NULL COMMENT '사용자 UUID (user.user_uuid 참조)', -- 플랫폼 정보 platform VARCHAR(20) NOT NULL COMMENT '플랫폼 (youtube, instagram)', platform_user_id VARCHAR(100) NOT NULL COMMENT '채널 ID (재연동 후에도 불변)', -- 플랫폼 결과 platform_video_id VARCHAR(100) NOT NULL COMMENT '플랫폼에서 부여한 영상 ID', platform_url VARCHAR(500) NULL COMMENT '플랫폼에서의 영상 URL', -- 메타데이터 title VARCHAR(200) NOT NULL COMMENT '영상 제목', -- 시간 정보 uploaded_at DATETIME NOT NULL COMMENT 'SocialUpload 완료 시각 (정렬 기준)', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '레코드 생성 시각', -- 외래키 제약조건 CONSTRAINT fk_dashboard_user FOREIGN KEY (user_uuid) REFERENCES user(user_uuid) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='채널별 영상 업로드 기록 테이블 (대시보드 통계 기준)'; -- 유니크 인덱스 (동일 채널에 동일 영상 중복 삽입 방지) CREATE UNIQUE INDEX uq_vcu_video_channel ON dashboard(platform_video_id, platform_user_id); -- 복합 인덱스 (사용자별 채널 필터링) CREATE INDEX idx_vcu_user_platform ON dashboard(user_uuid, platform_user_id); -- 인덱스 (날짜 범위 조회) CREATE INDEX idx_vcu_uploaded_at ON dashboard(uploaded_at); -- =================================================================== -- 기존 데이터 마이그레이션 -- social_upload(status=completed) → dashboard INSERT IGNORE -- 서버 기동 시 init_dashboard_table()에서 자동 실행됩니다. -- 아래 쿼리는 수동 실행 시 참고용입니다. -- =================================================================== /* INSERT IGNORE INTO dashboard ( user_uuid, platform, platform_user_id, platform_video_id, platform_url, title, uploaded_at ) SELECT su.user_uuid, su.platform, sa.platform_user_id, su.platform_video_id, su.platform_url, su.title, su.uploaded_at FROM social_upload su JOIN social_account sa ON su.social_account_id = sa.id WHERE su.status = 'completed' AND su.platform_video_id IS NOT NULL AND su.uploaded_at IS NOT NULL AND sa.platform_user_id IS NOT NULL; */