-- 프로젝트별 순번(project_sequence_no) 자동 할당 개선 -- 수신함에서 진행 중/완료로 상태 변경 시 프로젝트별 순번이 자동 할당되도록 개선 DO $migration$ DECLARE issue_record RECORD; seq_no INTEGER; updated_count INTEGER := 0; BEGIN RAISE NOTICE '=== 프로젝트별 순번 자동 할당 개선 마이그레이션 시작 ==='; -- 1. generate_project_sequence_no 함수가 존재하는지 확인 IF NOT EXISTS (SELECT 1 FROM pg_proc WHERE proname = 'generate_project_sequence_no') THEN RAISE EXCEPTION '❌ generate_project_sequence_no 함수가 존재하지 않습니다. 016_add_management_fields.sql을 먼저 실행하세요.'; END IF; -- 2. 진행 중 또는 완료 상태인데 project_sequence_no가 NULL인 이슈들 찾기 RAISE NOTICE '🔍 project_sequence_no가 누락된 이슈들을 찾는 중...'; FOR issue_record IN SELECT id, project_id, review_status FROM issues WHERE review_status IN ('in_progress', 'completed') AND project_sequence_no IS NULL ORDER BY project_id, reviewed_at NULLS LAST, report_date LOOP -- 프로젝트별 순번 생성 SELECT generate_project_sequence_no(issue_record.project_id) INTO seq_no; -- 순번 할당 UPDATE issues SET project_sequence_no = seq_no WHERE id = issue_record.id; updated_count := updated_count + 1; RAISE NOTICE '✅ 이슈 ID: %, 프로젝트 ID: %, 할당된 순번: %', issue_record.id, issue_record.project_id, seq_no; END LOOP; -- 3. 결과 요약 RAISE NOTICE '=== 마이그레이션 완료 ==='; RAISE NOTICE '📊 총 %개의 이슈에 프로젝트별 순번이 할당되었습니다.', updated_count; -- 4. 검증 DECLARE missing_count INTEGER; total_managed_count INTEGER; BEGIN -- 관리 중인 이슈 중 순번이 없는 것들 확인 SELECT COUNT(*) INTO missing_count FROM issues WHERE review_status IN ('in_progress', 'completed') AND project_sequence_no IS NULL; -- 전체 관리 중인 이슈 수 SELECT COUNT(*) INTO total_managed_count FROM issues WHERE review_status IN ('in_progress', 'completed'); RAISE NOTICE '=== 검증 결과 ==='; RAISE NOTICE '전체 관리 중인 이슈: %개', total_managed_count; RAISE NOTICE '순번이 누락된 이슈: %개', missing_count; IF missing_count > 0 THEN RAISE WARNING '⚠️ 여전히 %개의 이슈에 순번이 누락되어 있습니다.', missing_count; ELSE RAISE NOTICE '✅ 모든 관리 중인 이슈에 순번이 정상적으로 할당되었습니다.'; END IF; END; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '❌ 마이그레이션 실행 중 오류 발생: %', SQLERRM; END $migration$; -- 마이그레이션 로그 기록 INSERT INTO migration_log (migration_file, executed_at, status, notes) VALUES ( '017_fix_project_sequence_no.sql', NOW(), 'SUCCESS', '프로젝트별 순번 자동 할당 개선: 수신함에서 진행중/완료로 상태 변경시 project_sequence_no 자동 할당되도록 백엔드 로직 개선 및 기존 데이터 보정' ) ON CONFLICT (migration_file) DO UPDATE SET executed_at = NOW(), status = EXCLUDED.status, notes = EXCLUDED.notes;