This commit is contained in:
2026-07-15 18:33:33 +09:00
parent 6b1583103f
commit f533082537
201 changed files with 19776 additions and 563 deletions
+32
View File
@@ -0,0 +1,32 @@
---
type: page-api
status: stable
page_id: B03_FileInput
related_pages: ["[[B03_FileInput/B03_frontend]]", "[[B03_FileInput/B03_backend]]", "[[B03_FileInput/B03_db]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B03_FileInput_Router.py 실 코드 직접 확인 (2026-07-12)
---
# B03_FileInput — API
기본 prefix: `/api/projects` (`B03_FileInput_Router.py:66`). 세션 인증과 공통 오류 형식은 [[../../concepts/auth_rbac]], [[../../concepts/api_common]]을 참조한다.
## 일반 업로드
| 항목 | 위치 | 역할 |
|---|---|---|
| `POST /{project_id}/files` | `B03_FileInput_Router.py:267` | LAS/TIF/TFW/PRJ/DXF 다중 업로드·메타데이터 등록 |
## 청크 업로드
| 항목 | 위치 | 역할 |
|---|---|---|
| `POST /{project_id}/upload-sessions` | `B03_FileInput_Router.py:400` | 청크 업로드 세션 생성 |
| `POST /{project_id}/chunks` | `B03_FileInput_Router.py:443` | 청크 1개 저장 및 진행률 반환 |
| `POST /{project_id}/finalize` | `B03_FileInput_Router.py:507` | 모든 청크 병합·원본 파일 등록 |
| `GET /{project_id}/upload-status/{session_id}` | `B03_FileInput_Router.py:623` | 세션 상태·완료 청크 인덱스 조회 |
## workflow 조회
| 항목 | 위치 | 역할 |
|---|---|---|
| `GET /{project_id}/workflow-state` | `B03_FileInput_Router.py:667` | `current_stage`와 7단계 상태 반환 |
전체 경로는 `/api/projects/{project_id}/...`이며, workflow 상태 공통 정의는 [[../../concepts/workflow_state]]에 둔다.
@@ -0,0 +1,49 @@
---
type: page-backend
status: stable
page_id: B03_FileInput
related_pages: ["[[B03_FileInput/B03_frontend]]", "[[B03_FileInput/B03_api]]", "[[B03_FileInput/B03_db]]", "[[B03_FileInput/B03_dependencies]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B03_FileInput 실 코드 직접 확인 (2026-07-12)
---
# B03_FileInput — Backend
## 입력 검증·파일 처리
| 항목 | 위치 | 역할 |
|---|---|---|
| `FileUploadDescriptor` | `B03_FileInput_Schema.py:11` | 경로 이탈·확장자·크기 검증 |
| `resolve_upload_destination()` | `B03_FileInput_Engine.py:15` | 프로젝트 WF0 저장 목적지 결정 |
| `save_upload_stream()` | `B03_FileInput_Engine.py:31` | 일반 업로드 스트림 저장 |
| `resolve_chunk_session_dir()` | `B03_FileInput_Engine.py:64` | 임시 청크 디렉터리 결정 |
| `save_upload_chunk()` / `merge_upload_chunks()` | `B03_FileInput_Engine.py:77,124` | 청크 저장·순서 병합 |
| `remove_chunk_session()` | `B03_FileInput_Engine.py:173` | 청크 임시 디렉터리 정리 |
## 메타데이터 분석
| 항목 | 위치 | 역할 |
|---|---|---|
| `analyze_las_metadata()` | `B03_FileInput_Engine_Analyze.py:13` | LAS 포인트 수·범위·밀도 분석 |
| `analyze_prj_metadata()` | `B03_FileInput_Engine_Analyze.py:62` | PRJ CRS 분석 |
| `analyze_tfw_metadata()` | `B03_FileInput_Engine_Analyze.py:95` | TFW 변환계수 분석 |
| `analyze_tif_metadata()` | `B03_FileInput_Engine_Analyze.py:119` | TIF 래스터·CRS·범위 분석 |
| `analyze_input_metadata()` | `B03_FileInput_Engine_Analyze.py:146` | 확장자별 분석 라우팅 |
## 저장소
| 항목 | 위치 | 역할 |
|---|---|---|
| `create_input_file()` | `B03_FileInput_Repository.py:11` | `input_files` 원본 메타데이터 등록 |
| `get_project_storage_relative_path()` | `B03_FileInput_Repository.py:64` | 프로젝트 상대 저장경로 조회 |
| `create_upload_session()` / `get_upload_session()` | `B03_FileInput_Repository.py:89,135` | 청크 세션 생성·조회 |
| `upsert_upload_chunk()` / `list_completed_chunk_indexes()` | `B03_FileInput_Repository.py:165,216` | 청크 기록·완료 인덱스 조회 |
| `mark_upload_session_completed()` / `mark_upload_session_failed()` | `B03_FileInput_Repository.py:236,253` | 세션 성공·실패 상태 기록 |
## workflow·알림
| 항목 | 위치 | 역할 |
|---|---|---|
| `trigger_wf1_analysis_and_email()` | `B03_FileInput_Router.py:147` | WF1 분석 실행과 완료·실패 이메일 연결 |
| `start_stage()` | `B03_FileInput_Router.py:175` | WF1 시작, stage 1 IN_PROGRESS 전이 |
| `complete_stage()` | `B03_FileInput_Router.py:224,347,570` | WF0/WF1 완료 전이 |
| `fail_stage()` | `B03_FileInput_Router.py:256` | WF1 실패 전이 |
| `get_project_workflow_state()` | `B03_FileInput_Router.py:668` | 단일 프로젝트 workflow 상태 반환 |
workflow 정의: [[../../concepts/workflow_state]], 저장경로: [[../../concepts/storage_paths]].
+29
View File
@@ -0,0 +1,29 @@
---
type: page-db
status: stable
page_id: B03_FileInput
related_pages: ["[[B03_FileInput/B03_backend]]", "[[B03_FileInput/B03_api]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B03_FileInput_Repository.py 실 코드 직접 확인 (2026-07-12)
---
# B03_FileInput — DB 사용 관계
공유 테이블 정의는 [[db_schema/files_surface]]에서 1차 관리한다.
| 항목 | 위치 | 역할 |
|---|---|---|
| `input_files` | `B03_FileInput_Repository.py:11` | 원본 파일 유형·상대경로·크기·메타데이터 등록 |
| `upload_sessions` | `B03_FileInput_Repository.py:89` | 청크 업로드 세션과 전체 파일 정보 저장 |
| `upload_chunks` | `B03_FileInput_Repository.py:165` | 청크 인덱스·해시·크기 저장 |
| `projects` | `B03_FileInput_Router.py:111` | 업로드·WF1 진행상태 호환 캐시 갱신 |
| `project_workflow_stages` | `B03_FileInput_Router.py:175` | stage 0/1 시작·완료·실패 전이와 상태 조회 |
## 파일 경로
| 항목 | 위치 | 역할 |
|---|---|---|
| 원본 입력 | `B03_FileInput_Engine.py:15` | `B03_FileInput/input/{file_type}/`에 저장 |
| 청크 임시파일 | `B03_FileInput_Engine.py:64` | 프로젝트 저장소 하위 임시 세션 디렉터리 사용 |
| DB 저장값 | `B03_FileInput_Repository.py:64` | 프로젝트 루트 기준 상대경로 저장 |
경로 규칙 상세: [[storage_paths]].
@@ -0,0 +1,30 @@
---
type: page-dependencies
status: stable
page_id: B03_FileInput
related_pages: ["[[B03_FileInput/B03_frontend]]", "[[B03_FileInput/B03_backend]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B03_FileInput import 구문 직접 확인 (2026-07-12)
---
# B03_FileInput — Dependencies
공유 의존성의 1차 정의는 [[../../concepts/dependencies]]에 둔다.
| 항목 | 위치 | 역할 |
|---|---|---|
| FastAPI | `B03_FileInput_Router.py:10` | multipart 파일·폼 요청과 라우터 |
| Pydantic | `B03_FileInput_Schema.py:6` | 파일명·크기·확장자·청크 요청 검증 |
| aiomysql | `B03_FileInput_Router.py:9` | MariaDB 비동기 트랜잭션 |
| laspy | `B03_FileInput_Engine_Analyze.py:7` | LAS 포인트클라우드 메타데이터 분석 |
| rasterio | `B03_FileInput_Engine_Analyze.py:9` | TIF 래스터 메타데이터 분석 |
| pyproj | `B03_FileInput_Engine_Analyze.py:10` | PRJ/TIF CRS 해석 |
| numpy | `B03_FileInput_Engine_Analyze.py:8` | LAS 통계 계산 |
## 공통 모듈
| 항목 | 위치 | 역할 |
|---|---|---|
| `common_util_storage` | `B03_FileInput_Engine.py:11` | 단계별 저장경로 생성·해석 → [[../../concepts/storage_paths]] |
| `common_util_workflow_state` | `B03_FileInput_Router.py:50` | stage 상태 전이 → [[../../concepts/workflow_state]] |
| `common_util_email` | `B03_FileInput_Email.py:8` | 업로드·분석 완료/실패 이메일 발송 |
| `common_util_json` | `B03_FileInput_Router.py:47` | workflow 보조 JSON 원자적 저장 |
@@ -0,0 +1,46 @@
---
type: page-frontend
status: stable
page_id: B03_FileInput
related_pages: ["[[B03_FileInput/B03_backend]]", "[[B03_FileInput/B03_api]]", "[[B03_FileInput/B03_db]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B03_FileInput 실 코드 직접 확인 (2026-07-12)
---
# B03_FileInput — Frontend
## 페이지·업로드 흐름
| 항목 | 위치 | 역할 |
|---|---|---|
| `renderB03FileInput()` | `B03_FileInput_UI_Page.ts:170` | 파일 입력 화면과 이벤트 등록 |
| 청크 세션 생성 | `B03_FileInput_UI_Page.ts:515` | 대용량 파일을 청크 업로드로 시작 |
| 청크 병합 완료 | `B03_FileInput_UI_Page.ts:558` | 서버 병합 결과를 상태에 저장 |
| WF1 진행률 폴링 | `B03_FileInput_UI_Page.ts:577` | 분석 상태와 진행률 갱신 |
| B04 이동 | `B03_FileInput_UI_Page.ts:609,693` | WF1 완료 시 `ROUTES.B04_WF1_SURFACE`로 이동 |
## API 클라이언트
| 항목 | 위치 | 역할 |
|---|---|---|
| `uploadProjectFiles()` | `B03_FileInput_Api_Fetch.ts:60` | 일반 다중 파일 업로드 |
| `createUploadSession()` | `B03_FileInput_Api_Fetch.ts:82` | 청크 세션 생성 |
| `uploadFileChunk()` | `B03_FileInput_Api_Fetch.ts:100` | 단일 청크 전송 |
| `finalizeUploadSession()` | `B03_FileInput_Api_Fetch.ts:119` | 청크 병합 요청 |
| `fetchUploadStatus()` | `B03_FileInput_Api_Fetch.ts:133` | 청크 업로드 상태 조회 |
| `checkWF1AnalysisStatus()` | `B03_FileInput_Api_Fetch.ts:154` | WF1 분석 상태 조회 |
## 브라우저 상태·오프라인 보조
| 항목 | 위치 | 역할 |
|---|---|---|
| `loadB03ProjectState()` | `B03_FileInput_State.ts:23` | 프로젝트별 저장 상태 복원 |
| `saveB03UploadedFile()` | `B03_FileInput_State.ts:34` | 업로드 파일 결과 저장 |
| `updateB03AnalysisState()` | `B03_FileInput_State.ts:53` | 분석 상태·진행률 저장 |
| `restoreB03ProjectState()` | `B03_FileInput_State.ts:71` | 재진입 시 상태와 완료 콜백 복원 |
| `registerB03ServiceWorker()` | `B03_FileInput_UI_Page.ts:622` | Service Worker 등록 시도와 안내 토스트 |
공통 UI는 [[../../concepts/ui_templates]], 단계 상태는 [[../../concepts/workflow_state]]를 참조한다.
## 기술부채
| 항목 | 위치 | 역할 |
|---|---|---|
| 700줄 근접 | `B03_FileInput_UI_Page.ts:1` | 695줄; 추가 기능은 상태·업로드·화면 분할 검토 필요 |
| CSS 대형 파일 | `B03_FileInput_UI_Style.css:1` | 376줄; 공통 테마와 페이지 스타일 분리 검토 |