- `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>
84 lines
7.5 KiB
Markdown
84 lines
7.5 KiB
Markdown
---
|
|
type: page-feature
|
|
status: stable
|
|
page_id: B05_Profile
|
|
related_pages: ["[[B05_Profile/B05_frontend]]", "[[B05_Profile/B05_backend]]", "[[B05_Profile/B05_api]]", "[[B05_Profile/B05_db]]", "[[B05_Profile/B05_Profile_plan_2026-08-19]]", "[[B06_Section/B06_culvert_set]]", "[[B06_Section/B06_revetment_link_controls]]", "[[storage_paths]]", "[[workflow_state]]"]
|
|
last_updated: 2026-08-29
|
|
source: ["docs/raw/plans/2026-08-16_plan_B05_구조물_수동추가.md", "docs/raw/verification/2026-08-16_verify_B05_구조물_수동추가.md", "docs/raw/verification/2026-08-16_verify_B05_구조물_수동추가_교차검증.md", "docs/raw/plans/2026-08-17_plan_B05_structure_options_profile_marks.md", "docs/raw/plans/2026-08-17_plan_B05_box_ui_recommendations.md", "docs/raw/verification/2026-08-17_verify_B05_box_ui_recommendations_external.md", "docs/raw/plans/2026-08-20_plan_B06_배수관_횡단도_세트.md", "docs/raw/verification/2026-08-20_verify_B06_배수관_횡단도_세트_자체검증근거.md", "docs/raw/plans/2026-08-29_plan_B05_B06_기슭막이_연동_경사_조정.md", "docs/raw/verification/2026-08-29_verify_B05_B06_기슭막이_연동_경사_조정.md"]
|
|
---
|
|
|
|
# B05 구조물 정본·통합 편집
|
|
|
|
B05는 배수관과 일반 구조물의 저장 정본을 분리하되 하나의 「구조물 배치」 폼에서 편집한다. B05 선택지는 A·C·D·E·기타이고, B·F·G 정의는 B06 재사용을 위해 비활성 상태로 보존한다.
|
|
|
|
## 정본과 타입 레지스트리
|
|
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| 타입 레지스트리 | `B05_Profile/B05_Profile_Structure_Types.json` | 타입 ID·그룹·배치형태·옵션·표시색·약호·`drawing_views` 정의 |
|
|
| 일반 구조물 정본 | `B05_Profile/route/structures.json` | `revision`을 포함한 전체 목록 원자 저장 |
|
|
| 배관 정본 | B04 공용 `pipe_points.json` | `managed_by: pipe_points`인 배관을 계속 관리; 일반 구조물 정본에는 저장하지 않음 |
|
|
|
|
레지스트리는 생태연못을 삭제하고 B·F·G 10종을 `enabled: false`로 보존한다. D3 바닥막이는 점형 구조물로 부활했다. 독립 기슭막이는 일반 구조물에서 빠져 `pipe_points.json`의 `facility=revetment`로 관리하며 [[B06_Section/B06_revetment_link_controls]]의 공용 배관 계산 경로를 쓴다.
|
|
|
|
## 배수관·시설 옵션
|
|
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| `pipe_points.json.options` | B04 공용 배수 정본 | 관종·관경과 유입/유출 구조 옵션 왕복 보존 |
|
|
| `createRevetmentFields()` | `B05_Profile/B05_Profile_UI_Structures_Fields.ts` | 배수관 부속과 독립 기슭막이가 공유하는 입력 조각 |
|
|
| `createFacilityOptionsForm()` | `B05_Profile/B05_Profile_UI_Drainage_Facility.ts` | 배수관·BOX암거·세월교의 부속 소그룹과 관 정본 연결 |
|
|
| `fordSection()` | `B05_Profile/_Facility_Fields.ts` | 월류 폭·설계유량으로 필요 수심·단면·유속 계산 |
|
|
|
|
배수관은 기준 측점 하나만 쓰는 점형이다. 유입구는 기슭막이·집수정 중 하나를 고르고 유출구는 기슭막이를 쓴다. 배관·기슭막이의 보호공 선택 옵션은 삭제했고 B06은 횡단 형상에 맞춰 보호공을 계산한다. 독립 바닥 보호는 D3 바닥막이로 입력한다. BOX암거는 2.0×2.0 또는 3.0×3.0 프리셋과 사용자 지정을 제공하고, 날개벽은 유입·유출별 기본값(있음·1m·2m·45°)을 사용한다.
|
|
|
|
## 백엔드 파일
|
|
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| `StructureType`·`StructureInstance` | `B05_Profile/B05_Profile_Structures_Schema.py` | 배치형태별 위치 필드와 옵션 스키마 |
|
|
| `load_structures()`·`save_structures()` | `B05_Profile/B05_Profile_Structures_Repository.py` | 원자 저장, 판번호 충돌, 타입·옵션·노선 범위 검증 |
|
|
| 레거시 변환 | `B05_Profile/B05_Profile_Structures_Migration.py` | 배관 제외, 기성막이→기슭막이, 대피로→대피소, 멱등 변환 |
|
|
| 구조물 라우터 | `B05_Profile/B05_Profile_Structures_Router.py` | 타입 조회, 구조물 GET/PUT, 후속 단계 STALE 요청 |
|
|
|
|
## 프론트엔드 파일과 동작
|
|
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| API 클라이언트 | `B05_Profile/B05_Profile_Api_Structures.ts` | 레지스트리 캐시, 목록 조회·저장, 409 충돌 구분 |
|
|
| 구조물 패널 | `B05_Profile/B05_Profile_UI_Structures_Panel.ts` | 그룹→타입→측점→옵션의 단일 폼, 추가·수정·삭제 |
|
|
| 종단 마크 | `B05_Profile/B05_Profile_UI_Structures_Marks.ts` | 2행 알약 레인, 벌룬, 선택 구간 띠, A군 세로선 연계 |
|
|
| 페이지 배선 | `B05_Profile/B05_Profile_UI_Page.ts` | 관·일반 구조물 저장 분기, 새로고침, 전역 선택 동기화 |
|
|
| 우클릭 메뉴 | `B05_Profile/B05_Profile_UI_Profile_Panel.ts` | 배관 관리 타입과 필수 옵션 타입을 제외한 빠른 추가 |
|
|
| `blocksPipeLowering()` | `B05_Profile/B05_Profile_UI_Profile_Render.ts` | 관경+토피를 확보하지 못하는 배수관 측점 계획고 하향 차단 |
|
|
|
|
종단 그래프 아래에는 높이 50px의 2행 알약 레인을 둔다. 겹치지 않는 알약은 32px로 가운데 배치하고 겹치는 항목만 24px 두 줄로 나눈다. A군은 알약과 측점 세로선·계획고 틸팅 버튼을 함께 유지하며 선택 상태를 동기화한다.
|
|
|
|
## 유역 추천·개략 단면
|
|
|
|
| 항목 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| `size_pipe()` | `common_util/common_util_drainage_detail.py` | 유효직경·필요 단면·추천 시설·추천 관경 산출 |
|
|
| `_apply_recommendations()` | `B04_PreProcess/B04_PreProcess_Router_Basins.py` | 자동 배치 관에 추천 관경·시설을 주입하고 사용자 변경값 보호 |
|
|
| `ford_width_m` | `B05_Profile/B05_Profile_Structure_Types.json` | 물넘이·세월교의 사용자 입력 월류 폭 |
|
|
|
|
유효직경 1,500mm 이하는 배관 규격을 스냅하고, 초과~2,000mm 이하는 BOX암거 후보, 2,000mm 초과는 세월교·물넘이 검토로 추천한다. 추천은 유량만 근거로 하며 계곡 횡단경사·하천 차수는 현장 확인으로 남긴다. 물넘이·세월교 폼은 월류 폭을 받으면 필요 수심·필요 단면·유속을 표시한다.
|
|
|
|
## API
|
|
|
|
| 메서드·경로 | 역할 |
|
|
|---|---|
|
|
| `GET /api/projects/structure-types` | 타입 레지스트리 반환 |
|
|
| `GET /api/projects/{project_id}/route/structures` | 일반 구조물 정본과 `revision` 조회 |
|
|
| `PUT /api/projects/{project_id}/route/structures` | 전체 목록 저장, 충돌·검증 결과와 STALE 처리 상태 반환 |
|
|
|
|
## B06 경계와 남은 범위
|
|
|
|
위치·범위·제원 변경은 B06 이후 재작업 대상이다. 무효화가 필요했지만 실패하면 저장 성공과 별도로 B06 재실행 경고를 표시한다.
|
|
|
|
배수관 횡단도 세트는 [[B06_Section/B06_culvert_set]]에 완료 반영했다. 나머지 구조물별 횡단도·상세도 표현과 B·F·G 활성화는 `docs/raw/PLAN.md`의 구조물 적용 범위 표를 입력으로 확정한다. 부속 자동 제안, 지형·하천 차수 기반 추천, BOX암거·물넘이·세월교 상세 산식, 유효직경 계수 재확정은 후속이다.
|
|
|
|
## 검증
|
|
|
|
2026-08-20 완료 기록: 구조물 범위 입력·설계속도·바닥막이 부활·독립 기슭막이·배수관 계획고 하향 제한과 B06 세트를 포함해 최종 pytest 148 passed·7 skipped, TypeScript·Ruff·Prettier와 실화면 확인이 기록됐다. 근거는 `raw/verification/2026-08-20_verify_B06_배수관_횡단도_세트_자체검증근거.md`에 보존했으며 위키 관리자는 2차 교차검증을 재실행하지 않았다.
|