-- ===================================================================
-- 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;
*/
