Files
vexplor/db/scripts/README_cleanup.md
kjs c70998fa4f feat: 메뉴 복사 기능 - 2단계 복사 방식으로 화면 참조 매핑 문제 해결
- 문제: 화면 복사 시 참조되는 화면이 아직 복사되지 않아 screenIdMap에 매핑 정보가 없었음
- 해결: 2단계 복사 방식 도입
  1단계: 모든 screen_definitions 먼저 복사하여 screenIdMap 완성
  2단계: screen_layouts 복사하면서 완성된 screenIdMap으로 참조 업데이트
- 결과: targetScreenId가 올바르게 새 회사의 화면 ID로 매핑됨 (예: 149 → 517)
- 추가: 화면 수집 시 문자열 타입 ID도 올바르게 파싱하도록 개선
- 추가: 참조 화면 발견 및 업데이트 로그 추가

관련 파일:
- backend-node/src/services/menuCopyService.ts
- db/migrations/1003_add_source_menu_objid_to_menu_info.sql
- db/scripts/cleanup_company_11_*.sql
2025-11-21 14:37:09 +09:00

4.1 KiB

COMPANY_11 테스트 데이터 정리 가이드

📋 개요

메뉴 복사 기능을 재테스트하기 위해 COMPANY_11의 복사된 데이터를 삭제하는 스크립트입니다.

⚠️ 중요 사항

  • 보존되는 데이터: 권한 그룹(authority_master, authority_sub_user), 사용자 정보(user_info)
  • 삭제되는 데이터: 메뉴, 화면, 레이아웃, 플로우, 코드
  • 안전 모드: cleanup_company_11_for_test.sql은 ROLLBACK으로 테스트만 가능
  • 실행 모드: cleanup_company_11_execute.sql은 즉시 COMMIT

🚀 실행 방법

방법 1: Docker 컨테이너에서 직접 실행 (권장)

# 1. 테스트 실행 (롤백 - 실제 삭제 안 됨)
cd /Users/kimjuseok/ERP-node
docker exec -i erp-node-db-1 psql -U postgres -d ilshin < db/scripts/cleanup_company_11_for_test.sql

# 2. 실제 삭제 실행
docker exec -i erp-node-db-1 psql -U postgres -d ilshin < db/scripts/cleanup_company_11_execute.sql

방법 2: DBeaver 또는 pgAdmin에서 실행

  1. db/scripts/cleanup_company_11_for_test.sql 파일 열기
  2. 전체 스크립트 실행 (롤백되어 안전)
  3. 결과 확인 후 cleanup_company_11_execute.sql 실행

방법 3: psql 직접 접속

# 1. 컨테이너 접속
docker exec -it erp-node-db-1 psql -U postgres -d ilshin

# 2. SQL 복사 붙여넣기
# (cleanup_company_11_execute.sql 내용 복사)

📊 삭제 대상

항목 테이블명 삭제 여부
메뉴 menu_info 삭제
메뉴 권한 rel_menu_auth 삭제
화면 정의 screen_definitions 삭제
화면 레이아웃 screen_layouts 삭제
화면-메뉴 할당 screen_menu_assignments 삭제
플로우 정의 flow_definition 삭제
플로우 스텝 flow_step 삭제
플로우 연결 flow_step_connection 삭제
코드 카테고리 code_category 삭제
코드 정보 code_info 삭제
권한 그룹 authority_master 보존
권한 멤버 authority_sub_user 보존
사용자 user_info 보존

🔍 삭제 순서 (외래키 제약 고려)

1. screen_layouts (화면 레이아웃)
2. screen_menu_assignments (화면-메뉴 할당)
3. screen_definitions (화면 정의)
4. rel_menu_auth (메뉴 권한)
5. menu_info (메뉴)
6. flow_step (플로우 스텝)
7. flow_step_connection (플로우 연결)
8. flow_definition (플로우 정의)
9. code_info (코드 정보)
10. code_category (코드 카테고리)

실행 후 확인

스크립트 실행 후 다음과 같이 표시됩니다:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 삭제 완료!

남은 데이터:
  - 메뉴: 0 개
  - 화면: 0 개
  - 권한 그룹: 1 개 (보존됨)
  - 사용자: 1 개 (보존됨)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ 정리 완료! 메뉴 복사 테스트 준비됨

🧪 테스트 시나리오

  1. 데이터 정리

    docker exec -i erp-node-db-1 psql -U postgres -d ilshin < db/scripts/cleanup_company_11_execute.sql
    
  2. 메뉴 복사 실행

    • 프론트엔드에서 원본 메뉴 선택
    • "복사" 버튼 클릭
    • 대상 회사: COMPANY_11 선택
    • 복사 실행
  3. 복사 결과 확인

    • COMPANY_11 사용자(copy)로 로그인
    • 사용자 메뉴에 복사된 메뉴 표시 확인
    • 버튼 클릭 시 모달 화면 정상 열림 확인
    • 플로우 기능 정상 작동 확인

🔄 재테스트

재테스트가 필요하면 다시 정리 스크립트를 실행하세요:

# 빠른 재테스트
docker exec -i erp-node-db-1 psql -U postgres -d ilshin < db/scripts/cleanup_company_11_execute.sql

📝 참고

  • 백업: 중요한 데이터가 있다면 먼저 백업하세요
  • 권한: 사용자 copy와 권한 그룹 복사권한은 보존됩니다
  • 로그: 백엔드 로그에서 복사 진행 상황을 실시간으로 확인할 수 있습니다