- `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>
5.6 KiB
5.6 KiB
완료 계획: B06 페이지 개선 — 진입 즉시 자동 생성 + 경로 컨텍스트 읽기 전용 표시
이관일: 2026-07-18
이관 원본: docs/raw/PLAN.md
배경
B05 "경로 확정" 후 B06 진입 시, 경로 ID·지면 필터·지표면 표현·좌표계·스무딩을 사용자가 직접 입력해야 하고 결과도 바로 나오지 않는다(B06_wf3_ProfileCross_UI_Page.ts:66-110). 이 값들은 B04(지면 필터·지표면 표현·스무딩·좌표계)와 B05(경로 확정)에서 이미 결정된 값이므로 읽기 전용 표시로 바꾸고, 진입 즉시 config 기본 옵션으로 종횡단을 자동 생성해 결과를 바로 보여준다. 측정/횡단 옵션은 config 기본값을 폼에 미리 채워두고, 사용자가 수정하면 "재생성" 버튼으로 다시 실행한다.
조사 결과 (설계 근거)
- B04 확정값 공용 함수 재사용:
common_util_surface_confirmation.py:42 get_surface_confirmation_params()가 B04 확정 스냅샷(stage 1 params)에서source_filter/method/smooth/contour_interval_m을 반환 (B05도 동일 함수 사용) → filter/method/smooth 출처로 채택.surface_models.generation_paramsJSON 파싱보다 단순하고 B05 화면과 값 일치 보장 - 좌표계:
surface_models.crs_epsg— B03 업로드 시 pyproj로 실제 감지·저장된 값. 확정 경로의routes.surface_model_id로 조회 projects.crs_epsg는B02_ProjRegister_Repository.py:72에서 5178 하드코딩 → 신뢰 불가, 사용 안 함 (B02 수정은 스코프 밖)- smooth도 상속 대상: B04에서 선정된 맵으로 경로를 만들었으므로 종횡단도 동일 조건이어야 함 → 체크박스 제거, 읽기 전용 표시 (사용자 확인 완료)
SectionGenerationOptions(B06_wf3_ProfileCross_Engine_Section.py:26-32)가 이미config_system.py의SECTION_*기본값 참조 → 새 엔드포인트 응답에 기본값을 실어 프론트에 노출(프론트 하드코딩 이중관리 방지)- 현재
GET /sections/{route_id}요약 응답에는 종단 메타(id/경로/상태)만 있고 연장·횡단 개수가 없음 → 재진입 시 기존 결과 카드를 그리려면 보강 필요
구현 체크리스트
백엔드
- 1.
B06_wf3_ProfileCross_Repository.py:get_confirmed_route_context(connection, project_id)추가 —routes(status='CONFIRMED',computed_at DESC, id DESC) LEFT JOINsurface_models로 route_id + crs_epsg 반환. 경로 없으면 None. 추가로count_cross_sections(connection, route_id)및get_longitudinal_section의 data(JSON, length_m 포함) 반환 보강 - 2.
B06_wf3_ProfileCross_Schema.py:SectionOptionDefaults(station_interval_m, cross_half_width_m, cross_sample_interval_m, long_sample_interval_m),SectionContextResponse(project_id, route_id/filter_key/method/smooth/crs_epsg는 nullable, defaults) 추가.SectionSummaryResponse에 length_m·cross_section_count 필드 보강 - 3.
B06_wf3_ProfileCross_Router.py:GET /api/projects/{project_id}/sections/context추가 —get_confirmed_route_context+get_surface_confirmation_params조합으로 응답 구성. 경로 없으면 null 필드로 200 반환(404 아님). defaults는SectionGenerationOptions()인스턴스 값 매핑.get_sections는 보강된 요약(연장·횡단 개수) 반환
프론트엔드
- 4.
B06_wf3_ProfileCross_Api_Fetch.ts:SectionContextResponse인터페이스 +fetchSectionContext(projectId)추가.SectionSummaryResponse보강 필드 반영 - 5.
B06_wf3_ProfileCross_UI_Page.ts:- routeGroup of input fields 4개(routeIdField/filterField/methodField/crsField)와 smooth 체크박스를 읽기 전용 표시 행(B04
buildInfoLine패턴)으로 교체 — 경로 ID / 지면 필터 / 지표면 표현 / 스무딩 / 좌표계(EPSG:{n}) 표시 - 옵션 4개 필드에 context 응답의 defaults 프리필
- 진입 흐름:
fetchSectionContext∥fetchWorkflowState병렬 호출 → ① 확정 경로 없으면 안내 + 버튼 비활성화 ② 기존 종횡단 있으면(getSections) 재생성 없이 기존 결과 카드 표시 ③ 없으면 config 기본 옵션으로generateSections자동 실행 후 결과 표시 - 생성 버튼 라벨을 "재생성" 의미로 변경, 클릭 시 폼 파싱 대신 컨텍스트 저장값(route_id/filter_key/method/smooth/crs) + 사용자 조정 옵션으로 요청
- routeGroup of input fields 4개(routeIdField/filterField/methodField/crsField)와 smooth 체크박스를 읽기 전용 표시 행(B04
- 6.
B06_wf3_ProfileCross_UI_Style.css: 읽기 전용 표시 행 스타일 추가(필요 시) - 7. locale 키 정리:
ui_template_locale에 읽기 전용 라벨·자동 생성 안내·재생성 버튼 문구 등록(신규 필요분만)
변경하지 않는 것
SectionGenerationOptions/config_system.py의SECTION_*/_build_options(이미 config 기반)SectionGenerateRequest스키마 필드 구성(프론트가 컨텍스트 값으로 채워 보내는 방식만 변경)- POST generate/confirm 엔드포인트 로직
검증 방법
GET /api/projects/{id}/sections/context— 확정 경로 있는 프로젝트에서 route_id/filter_key/method/smooth/crs_epsg/defaults 확인- 브라우저: B05 경로 확정 → B06 진입 시 자동 생성 실행 후 결과(연장·횡단 개수·파일)가 바로 표시되는지, 경로 정보 5개(ID/필터/표현/스무딩/좌표계)가 읽기 전용으로 표시되는지, 옵션 필드에 20.0/15.0/0.5/1.0 프리필 확인
- B06 재진입 시 재생성 없이 기존 결과가 표시되는지 확인
- 옵션 수정 → 재생성 버튼 클릭 시 새 옵션으로 재실행되는지 확인
- 경로 없는 프로젝트로 B06 진입 시 오류 없이 안내 표시 확인