# 프로젝트 진행 상황 (2025-11-20)

## 작업 개요: 디지털 트윈 3D 야드 고도화 (동적 계층 구조)

### 1. 핵심 변경 사항
기존의 고정된 `Area` -> `Location` 2단계 구조를 유연한 **N-Level 동적 계층 구조**로 변경하고, 공간적 제약을 강화했습니다.

### 2. 완료된 작업

#### 데이터베이스
- **마이그레이션 실행**: `db/migrations/042_refactor_digital_twin_hierarchy.sql`
- **스키마 변경**:
  - `digital_twin_layout` 테이블에 `hierarchy_config` (JSONB) 컬럼 추가
  - `digital_twin_objects` 테이블에 `hierarchy_level`, `parent_key`, `external_key` 컬럼 추가
  - 기존 하드코딩된 테이블 매핑 컬럼 제거

#### 백엔드 (Node.js)
- **API 추가/수정**:
  - `POST /api/digital-twin/data/hierarchy`: 계층 설정에 따른 전체 데이터 조회
  - `POST /api/digital-twin/data/children`: 특정 부모의 하위 데이터 조회
  - 기존 레거시 API (`getWarehouses` 등) 호환성 유지
- **컨트롤러 수정**:
  - `digitalTwinDataController.ts`: 동적 쿼리 생성 로직 구현
  - `digitalTwinLayoutController.ts`: 레이아웃 저장/수정 시 `hierarchy_config` 및 객체 계층 정보 처리

#### 프론트엔드 (React)
- **신규 컴포넌트**: `HierarchyConfigPanel.tsx`
  - 레벨 추가/삭제, 테이블 및 컬럼 매핑 설정 UI
- **유틸리티**: `spatialContainment.ts`
  - `validateSpatialContainment`: 자식 객체가 부모 객체 내부에 있는지 검증 (AABB)
  - `updateChildrenPositions`: 부모 이동 시 자식 객체 자동 이동 (그룹 이동)
- **에디터 통합 (`DigitalTwinEditor.tsx`)**:
  - `HierarchyConfigPanel` 적용
  - 동적 데이터 로드 로직 구현
  - 3D 캔버스 드래그앤드롭 시 공간적 종속성 검증 적용
  - 객체 이동 시 그룹 이동 적용

### 3. 현재 상태
- **백엔드 서버**: 재시작 완료, 정상 동작 중 (PostgreSQL 연결 이슈 해결됨)
- **DB**: 마이그레이션 스크립트 실행 완료

### 4. 다음 단계 (테스트 필요)
새로운 세션에서 다음 시나리오를 테스트해야 합니다:
1. **계층 설정**: 에디터에서 창고 -> 구역(Lv1) -> 위치(Lv2) 설정 및 매핑 저장
2. **배치 검증**:
   - 구역 배치 후, 위치를 구역 **내부**에 배치 (성공해야 함)
   - 위치를 구역 **외부**에 배치 (실패해야 함)
3. **이동 검증**: 구역 이동 시 내부의 위치들도 같이 따라오는지 확인

### 5. 관련 파일
- `frontend/components/admin/dashboard/widgets/yard-3d/DigitalTwinEditor.tsx`
- `frontend/components/admin/dashboard/widgets/yard-3d/HierarchyConfigPanel.tsx`
- `frontend/components/admin/dashboard/widgets/yard-3d/spatialContainment.ts`
- `backend-node/src/controllers/digitalTwinDataController.ts`
- `backend-node/src/routes/digitalTwinRoutes.ts`
- `db/migrations/042_refactor_digital_twin_hierarchy.sql`


