o2o-castad-backend/docs/database-schema/migration_2026-07-27_backfill_first_video_created_at.sql

49 lines
1.8 KiB
SQL

-- ============================================================
-- Migration: 기존 회원의 first_video_created_at 백필
-- Date: 2026-07-27
-- Description: Meta FirstVideoCreated 전환 이벤트 오발화 방지
--
-- [문제]
-- first_video_created_at은 신규 컬럼이라 기존 회원 전원이 NULL이다.
-- FirstVideoCreated 발화 조건은 "completed 영상 존재 + 컬럼이 NULL"이므로,
-- 배포 후 기존 회원이 영상을 하나 더 만들면 그것이 51번째 영상이어도
-- "첫 영상 생성"으로 발화되어 핵심 전환 이벤트가 오염된다.
-- (CompleteRegistration은 is_new_user 게이트 + 24시간 가드가 있어 해당 없음)
--
-- [조치]
-- 이미 completed 영상을 보유한 회원은 그 최초 영상의 생성 시각으로
-- 컬럼을 채워 "이미 발화 완료" 상태로 만든다.
--
-- [실행 시점]
-- 반드시 백엔드 배포 전에 실행할 것.
-- (ALTER TABLE 마이그레이션 2건을 먼저 적용한 뒤 실행)
--
-- 관련 코드: app/video/api/routers/v1/tracking.py
-- ============================================================
-- 백필 대상 건수 사전 확인 (실행 전 참고용)
-- SELECT COUNT(*) FROM `user` u
-- WHERE u.first_video_created_at IS NULL
-- AND EXISTS (
-- SELECT 1 FROM video v
-- JOIN project p ON v.project_id = p.id
-- WHERE p.user_uuid = u.user_uuid AND v.status = 'completed'
-- );
UPDATE `user` u
SET u.first_video_created_at = (
SELECT MIN(v.created_at)
FROM video v
JOIN project p ON v.project_id = p.id
WHERE p.user_uuid = u.user_uuid
AND v.status = 'completed'
)
WHERE u.first_video_created_at IS NULL
AND EXISTS (
SELECT 1
FROM video v
JOIN project p ON v.project_id = p.id
WHERE p.user_uuid = u.user_uuid
AND v.status = 'completed'
);