🎯 핵심 개선사항: - 수신함에서 진행중/완료로 상태 변경시 project_sequence_no 자동 할당 - 프로젝트별로 1부터 시작하는 깔끔한 순번 체계 🔧 백엔드 수정: - inbox.py: update_issue_status에 자동 할당 로직 추가 - generate_project_sequence_no() DB 함수 활용 - 진행중/완료 상태 변경시에만 실행 📁 DB 마이그레이션: - 017_fix_project_sequence_no.sql 생성 - 기존 데이터 보정 (누락된 순번 0개 확인) - migration_log 테이블 구조에 맞게 로그 기록 📋 문서화: - DB_CHANGES_LOG.md 생성 및 업데이트 - 배포 가이드, 검증 방법, 주의사항 명시 - Docker 환경 기준 실행 방법 제공 ✅ 실행 완료 상태: - 마이그레이션 성공 (2025-10-26 11:15:44+09:00) - 백엔드 서비스 재시작 완료 - 모든 검증 항목 통과 Expected Result: 🎯 현황판에서 프로젝트별 No.1, No.2, No.3... 표시 🎯 6개월 후에도 각 프로젝트 내에서 작은 번호 유지 🎯 전체 통합 번호 대신 프로젝트별 깔끔한 순번 체계
88 lines
3.5 KiB
SQL
88 lines
3.5 KiB
SQL
-- 프로젝트별 순번(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;
|