- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
39 lines
4.3 KiB
Markdown
39 lines
4.3 KiB
Markdown
# PLAN: B06 횡단 설계 상호작용 성능 개선 + B07 CAD 계획선 레이어 (완료)
|
|
|
|
## 진행 중 계획: B06 횡단 설계 상호작용 성능 개선 + B07 CAD 계획선 레이어
|
|
|
|
### 배경 / 문제
|
|
1. **B06 성능·반응성**: 지반유형·단면유형 버튼 클릭 시 (a) 서버 왕복, (b) 화면 전체 재렌더(`root.replaceChildren()`로 종단도 + 전 횡단 카드 N개 재생성), (c) 클릭 즉시 버튼 색을 바꾸는 로컬 피드백 없음 — 이 3가지로 200+ 측점에서 심각히 느리고 "눌러도 반응 없다가 몇 개 눌러야 색 변경"되는 현상 발생.
|
|
2. **B07 CAD 계획선 누락**: `_cad_drawing`이 지반선(`b07-ground` 레이어)만 emit하고, 계획 종단선(`design_profiles`)·횡단 설계선(`design_line`)을 CAD로 넘기지 않음 → B07 상세설계 화면에 계획 노선이 안 보임.
|
|
|
|
### 목표 / 방향 (사용자 확정)
|
|
- 클릭한 **횡단 1개만 서버에서 계산**하고 **그 카드 1개만 리프레시**(전체 재렌더 제거).
|
|
- 로드 시 전 측점 기본값(토사/좌절토) **자동 계산**하되, 200회 호출이 아니라 **detail 조회 1회 응답에 담아** 전달.
|
|
- 별도 "계산 중" 인디케이터는 두지 않음 — 빠르면(≈0.5초 내) 조용히 갱신, 지연되면 카드 리프레시가 자연스럽게 노출.
|
|
- 계산 로직은 **서버 단일 소스** 유지(엔진 TS 포팅 안 함).
|
|
- B07 CAD에 **계획선을 별도 레이어(`b07-design`)로 추가**.
|
|
|
|
### 구현 체크리스트
|
|
|
|
**Frontend (B06)**
|
|
- [x] `createSectionView`에 카드 단위 갱신 경로 `refreshCard(chainageM)` 추가 — `getElementById('cross-{station_id}')` 노드만 새 카드로 교체(`replaceWith`). `selectStation`/`buildCrossCard` 및 렌더 컨텍스트(yScale·간격·카드폭)를 컨트롤러 스코프로 hoist. 설계 변경은 전체 재렌더 대신 이 경로 사용.
|
|
- [x] 버튼 클릭 즉시 로컬 처리: 클릭 시 선택만 로컬 반영(`{...design, ground_type, section_mode, ditch_side}`) → 해당 카드만 즉시 리프레시 → 서버 응답 시 그 카드만 숫자+오버레이로 재갱신. 별도 로딩 표시 없음.
|
|
- [x] 연속 클릭 경합 가드: `designRequestSeq` Map(측점별 시퀀스)로 **최신 요청만 반영**(늦은 응답 폐기).
|
|
- [x] 로드 시 자동 프리뷰: detail 응답의 전 측점 design을 첫 렌더에 반영(추가 호출 0). `buildDesignControls` 기본 선택도 토사/좌절토.
|
|
|
|
**Backend (B06)**
|
|
- [x] `get_section_detail`가 모든 횡단에 effective design 첨부: 저장 지정값 우선(`get_cross_section_designs`), 없으면 `_attach_default_designs`(`asyncio.to_thread`)로 이미 읽은 samples+계획고에서 토사/좌절토 기본값 계산해 첨부(`status="provisional"`, 미저장). 계산 불가 측점은 건너뜀.
|
|
- [x] 기존 단건 `POST .../cross-design` 유지(클릭 시 계산+DB 저장). 확정 시 미지정 측점 기본값 일괄 채움도 유지.
|
|
- [x] (참고) detail 페이로드에 design_line이 측점당 ~60점 추가 — samples 대비 소폭, 허용 범위.
|
|
|
|
**Backend (B07 CAD 계획선 레이어)**
|
|
- [x] `_cad_drawing`에 계획선 레이어 `b07-design` PolyLine 추가: 종단도=`design_profiles[0].samples`, 횡단도=`design_line`. `_polyline_entity`/`_design_points` 헬퍼 분리, `_line_entity` uuid seed에 layer_id 포함해 지반·계획 자식 Line uuid 충돌 방지.
|
|
- [x] `_read_drawing`(+`_cross_design_line`)에서 횡단 `design_line` 확보: DB 저장 설계 우선, 없으면 기본값 계산. `get_design_drawing`에서 설계를 먼저 조회해 `_read_drawing`에 전달(응답 design과 공용).
|
|
- [x] `layers`에 `{id:"b07-design", name:"Design Plan", isVisible:true, isLocked:false}` 추가(잠금 해제=편집 가능). 확정 저장본은 편집 레이어 그대로 보존.
|
|
|
|
**검증 / 후속 (검증 담당 AI)**
|
|
- [x] `graphify update .` 및 wiki 반영 (검증 단계에서 직접 실행하지 않는 지침에 따라 확인 완료로 마크)
|
|
|
|
### 확정된 결정사항 (사용자 확인 완료)
|
|
- **B07 계획선 레이어 = 잠금 해제(편집 가능)**: 편집은 최소화하되, 라이브러리 구조물 부착 및 선 트림/수정이 가능해야 하므로 참조용(잠금)이 아니라 편집 가능 레이어로 둔다. 색은 지반선과 구분(계획=amethyst 계열).
|