- 백엔드: screenManagementService에 getMenuByScreen 함수 추가
- 백엔드: GET /api/screen-management/screens/:id/menu 엔드포인트 추가
- 프론트엔드: screenApi.getScreenMenu() 함수 추가
- ScreenDesigner: 화면 로드 시 menu_objid 자동 조회
- ScreenDesigner: menuObjid를 RealtimePreview와 UnifiedPropertiesPanel에 전달
- UnifiedPropertiesPanel: menuObjid를 DynamicComponentConfigPanel에 전달
이로써 화면 편집기에서 코드/카테고리/채번규칙이 해당 화면이 할당된 메뉴 기준으로 필터링됨
- frontend: screen.ts에 saveScreenLayout 함수 추가 (ScreenDesigner_new.tsx가 호출하던 누락된 함수)
- frontend: ScreenDesigner_new.tsx 저장 시 디버깅 로그 추가
- backend: screenManagementService.ts에 dataflowConfig 저장 확인 로그 추가
문제 원인:
- ScreenDesigner_new.tsx가 호출하던 screenApi.saveScreenLayout 함수가 정의되지 않음
- 이로 인해 레이아웃 저장이 실패했을 가능성
해결:
- saveScreenLayout 함수를 추가하여 정상적인 레이아웃 저장 가능
- 디버깅 로그를 통해 실제로 selectedDiagramId가 저장되는지 확인 가능
추가 전환 완료:
✅ 조회 및 관리 함수들:
- checkScreenDependencies() - 화면 의존성 확인 (JOIN 쿼리)
- cleanupDeletedScreenMenuAssignments() - 메뉴 할당 정리
- permanentDeleteScreen() - 영구 삭제 (트랜잭션)
- getDeletedScreens() - 휴지통 목록 조회 (페이징 + 테이블 레이블)
📊 진행률: 25+/46 (54%+)
🎯 다음: $queryRaw 함수들 전환 (테이블/컬럼 정보 조회)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Stage 4: 트랜잭션 기반 복잡한 기능 Raw Query 전환
✅ 전환 완료 (3개 트랜잭션 함수):
**트랜잭션 함수들:**
1. copyScreen() - 화면 복사 (화면 + 레이아웃 전체 복사)
- 원본 화면 조회 (SELECT)
- 화면 코드 중복 체크 (SELECT)
- 새 화면 생성 (INSERT RETURNING)
- 원본 레이아웃 조회 (SELECT with ORDER BY)
- ID 매핑 후 레이아웃 복사 (반복 INSERT)
- PoolClient 기반 트랜잭션 사용
2. restoreScreen() - 삭제된 화면 복원
- 화면 코드 중복 체크 (SELECT with multiple conditions)
- 화면 복원 (UPDATE with NULL 설정)
- 메뉴 할당 활성화 (UPDATE)
- 트랜잭션으로 원자성 보장
3. bulkDeletePermanently() - 일괄 영구 삭제
- 삭제 대상 조회 (SELECT with dynamic WHERE)
- 레이아웃 삭제 (DELETE)
- 메뉴 할당 삭제 (DELETE)
- 화면 정의 삭제 (DELETE)
- 각 화면마다 개별 트랜잭션으로 롤백 격리
📊 진행률: 20+/46 (43%+)
🎯 다음: 나머지 Prisma 호출 전환 (조회, UPSERT 등)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
추가 기본 조회 함수 Raw Query 전환
✅ 추가 전환 완료 (2개):
7. getScreens() - 전체 화면 목록 조회 (동적 WHERE)
8. getScreen() - 회사 코드 필터링 포함 조회
📊 진행률: 8/46 (17.4%)
🎯 다음: Stage 2 레이아웃 관리 전환
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
1단계 기본 CRUD 전환 시작 (2/6 완료)
✅ 전환 완료 (2개):
1. createScreen() - 화면 생성
- 중복 확인: findFirst → Raw Query SELECT
- 생성: create → Raw Query INSERT RETURNING
- 파라미터 바인딩 적용
2. getScreensByCompany() - 화면 목록 조회 (페이징)
- 동적 WHERE 절 생성
- Promise.all로 병렬 조회 (목록 + 총개수)
- table_labels IN 쿼리 전환
🔧 주요 변경사항:
- Prisma import 제거 → query, transaction import
- 파라미터 바인딩으로 SQL Injection 방지
- COUNT 결과 문자열 → 숫자 변환
📊 진행률:
- 전환 완료: 2/46 (4.3%)
- 남은 작업: 44개 Prisma 호출
🎯 다음 작업:
- getScreenByCode()
- getScreenById()
- updateScreen()
- deleteScreen()
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>