260710_0
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# B02_ProjRegister 프로젝트 생성 기능 코드 작업 완료 보고서
|
||||
|
||||
**작성일:** 2026-07-09
|
||||
**대상 계획서:** `.agent/plan_b02_project_creation.md`
|
||||
**작업 범위:** B02 프로젝트 등록 프론트엔드, 백엔드 API, DB 저장, 프로젝트 저장소 초기화
|
||||
|
||||
---
|
||||
|
||||
## 1. 작업 완료 요약
|
||||
|
||||
B02 프로젝트 등록 화면의 TODO 제출 흐름을 실제 API 연동으로 교체하고, FastAPI 백엔드에 `POST /api/b02/project` 엔드포인트를 추가했습니다.
|
||||
|
||||
프로젝트 생성 시 다음 작업이 수행됩니다.
|
||||
|
||||
1. 프론트엔드 1차 검증
|
||||
- 프로젝트명 필수값 검증
|
||||
- 사업 지역 필수값 검증
|
||||
- 사업 연도 범위 검증
|
||||
- 예상 연장 숫자/음수 검증
|
||||
2. 백엔드 Pydantic 2차 검증
|
||||
- `name`, `region`, `road_type`, `project_year`, `estimated_length_m`, `memo`
|
||||
3. DB 저장
|
||||
- `projects` 테이블 신규 레코드 생성
|
||||
- 초기 상태 `NEW`
|
||||
- 기본 좌표계 `crs_epsg = 5178`
|
||||
- `storage_path = storage/{company_id}/{user_id}/{project_id}`
|
||||
4. 저장소 초기화
|
||||
- `storage/{company_id}/{user_id}/{project_id}/` 생성
|
||||
- B03~B09 단계별 하위 폴더 생성
|
||||
- `workflow.json` 초기화
|
||||
- `project_manifest.json` 생성
|
||||
5. 프론트 상태 반영
|
||||
- 응답받은 `project_id`를 `CURRENT_PROJECT_ID_KEY`에 저장
|
||||
- 성공 토스트 표시
|
||||
- B03_FileInput 페이지로 이동
|
||||
|
||||
---
|
||||
|
||||
## 2. 생성 및 수정 파일
|
||||
|
||||
### 신규 파일
|
||||
|
||||
- `B02_ProjRegister/B02_ProjRegister_Schema.py`
|
||||
- 프로젝트 생성 요청/응답 Pydantic 스키마 추가
|
||||
|
||||
- `B02_ProjRegister/B02_ProjRegister_Repository.py`
|
||||
- 프로젝트 UUID 생성
|
||||
- `projects` Raw SQL INSERT
|
||||
- 단계별 저장소 폴더 생성
|
||||
- `workflow.json`, `project_manifest.json` 초기화
|
||||
|
||||
- `B02_ProjRegister/B02_ProjRegister_Router.py`
|
||||
- `POST /api/b02/project` 엔드포인트 추가
|
||||
- 세션/회사 연결 검증
|
||||
- 저장소/DB 예외 처리
|
||||
|
||||
### 수정 파일
|
||||
|
||||
- `B02_ProjRegister/B02_ProjRegister_UI_Page.ts`
|
||||
- TODO 제출 로직 제거
|
||||
- `fetch("/api/b02/project")` 연동
|
||||
- `credentials: "include"` 적용
|
||||
- 로딩 오버레이 및 에러 토스트 처리
|
||||
- `localStorage`에 현재 프로젝트 ID 저장
|
||||
|
||||
- `main.py`
|
||||
- B02 라우터 import 추가
|
||||
- `app.include_router(b02_proj_register_router)` 등록
|
||||
|
||||
---
|
||||
|
||||
## 3. 저장소 생성 구조
|
||||
|
||||
프로젝트 생성 시 실제 파일시스템에 다음 구조를 생성합니다.
|
||||
|
||||
```text
|
||||
storage/{company_id}/{user_id}/{project_id}/
|
||||
├── B03_FileInput/input/
|
||||
├── B04_wf1_Surface/processed/
|
||||
├── B05_wf2_Route/route/
|
||||
├── B06_wf3_ProfileCross/profiles/
|
||||
├── B07_wf4_DesignDetail/structures/
|
||||
├── B08_wf5_Quantity/quantities/
|
||||
├── B09_wf6_Estimation/v1/
|
||||
├── workflow.json
|
||||
└── project_manifest.json
|
||||
```
|
||||
|
||||
DB에는 기존 B03 업로드 로직이 해석 가능한 상대 경로 형식인 `storage/{company_id}/{user_id}/{project_id}`를 저장합니다.
|
||||
|
||||
---
|
||||
|
||||
## 4. 검증 결과
|
||||
|
||||
### 통과
|
||||
|
||||
- `venv\Scripts\ruff.exe format B02_ProjRegister main.py`
|
||||
- `venv\Scripts\ruff.exe check --fix B02_ProjRegister main.py`
|
||||
- `venv\Scripts\ruff.exe check B02_ProjRegister main.py`
|
||||
- `venv\Scripts\python.exe -m compileall B02_ProjRegister main.py`
|
||||
- `npx prettier --write B02_ProjRegister/B02_ProjRegister_UI_Page.ts`
|
||||
- `npx prettier --check B02_ProjRegister/B02_ProjRegister_UI_Page.ts`
|
||||
|
||||
### 미통과
|
||||
|
||||
- `npx tsc --noEmit`
|
||||
|
||||
실패 원인은 B02 작업 범위 밖의 기존 오류입니다.
|
||||
|
||||
- `B01_Dashboard/B01_Dashboard_UI_Helper.ts`: 미사용 매개변수
|
||||
- `B01_Dashboard/B01_Dashboard_UI_Modals.ts`: 미사용 import
|
||||
- `B01_Dashboard/B01_Dashboard_UI_Page.ts`: `RoutePath` 타입 누락
|
||||
- `ui_template/ui_template_locale.ts`: 중복 locale key
|
||||
|
||||
---
|
||||
|
||||
## 5. 참고 및 주의사항
|
||||
|
||||
- `.agent/db_schema_simple.md` 파일은 현재 저장소에서 찾을 수 없어, 실제 `db_management/001_create_schema.sql`, 기존 B03 저장 경로 유틸, `config_system.py` 기준으로 구현했습니다.
|
||||
- `npm install`은 타입 검사 확인 중 1회 실행했으나, 추적 중인 `node_modules`에 불필요한 변경이 발생하여 `node_modules`만 복원했습니다.
|
||||
- 실제 DB INSERT와 세션 기반 API 호출은 MariaDB/로그인 세션이 필요한 통합 환경에서 추가 확인이 필요합니다.
|
||||
Reference in New Issue
Block a user