- `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>
67 lines
4.6 KiB
Markdown
67 lines
4.6 KiB
Markdown
---
|
|
type: concept
|
|
status: stable
|
|
related_pages: ["[[B01_Dashboard/B01_frontend]]", "[[B02_ProjRegister/B02_backend]]", "[[B03_FileInput/B03_backend]]", "[[B04_PreProcess/B04_backend]]", "[[B05_Profile/B05_backend]]", "[[B06_Section/B06_backend]]", "[[B07_Quantity/B07_backend]]", "[[B08_DesignDetail/B08_backend]]", "[[B09_Estimation/B09_frontend]]", "[[architecture/implementation_status]]", "[[architecture/shared_resources]]"]
|
|
last_updated: 2026-08-16
|
|
source: ["docs/raw/verification/2026-07-19_verify_webcad_poc.md", "docs/raw/verification/2026-07-19_verify_B06_사이드바_버튼_폭_및_확정_후_B07_이동.md", "docs/raw/verification/2026-07-21_verify_B06_default_design_B07_gating.md", "docs/raw/verification/2026-08-04_verify_b05_b06_profile_ui_chain.md", "docs/raw/verification/2026-08-08_verify_R1_R2_features.md", "docs/raw/verification/2026-07-17_verify_workflow_stepbar.md"]
|
|
---
|
|
|
|
# Workflow 상태 관리
|
|
|
|
> DB 상태 유틸은 구현돼 있다. 그러나 B07은 임시 완료 우회, B09는 셸이므로 일곱 단계 전체가 업무 기능으로 완료된 것은 아니다.
|
|
|
|
## SSOT: `project_workflow_stages` 테이블 (실 DB 확인)
|
|
| 컬럼 | 타입 |
|
|
| --- | --- |
|
|
| id | INT PK |
|
|
| project_id | CHAR(36), FK |
|
|
| stage_no | TINYINT (0~6) |
|
|
| stage_key | VARCHAR(30) — FILE_INPUT/PREPROCESS/PROFILE/SECTION/QUANTITY/DESIGN_DETAIL/ESTIMATION |
|
|
| state | ENUM('NOT_STARTED','IN_PROGRESS','COMPLETE','FAILED','STALE') |
|
|
| progress_percent | TINYINT |
|
|
| params | LONGTEXT(JSON) — 재실행 시 폼 프리필용 |
|
|
| message, started_at, completed_at, updated_at | 진행/이력 |
|
|
|
|
생성 SQL: `db_management/006_workflow_state.sql`, 백필: `db_management/migrate_workflow_state.py`
|
|
|
|
## R1 워크플로우 단계 재편 (2026-08-08 반영)
|
|
- **B04_PreProcess** (stage 1: 지표면 분석)
|
|
- **B05_Profile** (stage 2: 경로 및 종단)
|
|
- **B06_Section** (stage 3: 횡단 및 유토곡선)
|
|
- **B07_Quantity** (stage 4: 수량 셸 신설, `confirm_quantity`로 stage 4 COMPLETE 전이)
|
|
- **B08_DesignDetail** (stage 5: CAD 도면/OpenWebCAD 이동, 정적 마운트 `/b08-cad`)
|
|
- **B09_Estimation** (stage 6: 설계도서 및 견적)
|
|
|
|
## 백그라운드 자동 계산 체인 및 사용자 설정 이월
|
|
* **업로드 후 자동 계산 체인 (B04 ➡️ B05 ➡️ B06)**: WF1(B04 지표면) 확정 성공 시 서버 백그라운드 태스크로 B05 기본 경로 계산·저장 ➡️ B06 일괄 횡단 설계를 연속 실행하여 대시보드/B05 진입 시 로딩 상태를 즉시 제공합니다.
|
|
* **B05/B06 자유 이동 및 동시 확정**: B06 전체 확정 시 stage 2와 3을 함께 COMPLETE 처리하고 B07 임시 셸로 이동한다.
|
|
* **B04 재확정 사용자 설정 이월 (`B03_FileInput_Service_Chain.py`)**: `run_redesign_chain`을 통해 B04 지표면이 재확정되어도 B05 사용자 제어점/경사 파라미터 및 B06 측점별 단면 설계를 이월하여 새 경로에 매칭 재계산 후 확정 전이시킵니다.
|
|
|
|
## 공통 유틸 `common_util/common_util_workflow_state.py`
|
|
| 함수 | 역할 |
|
|
|---|---|
|
|
| `initialize_project_stages(cursor, project_id)` | 프로젝트 생성 시 7행 NOT_STARTED 시드 |
|
|
| `start_stage(cursor, project_id, stage_no, params)` | IN_PROGRESS 전이 + N+1~6의 COMPLETE를 STALE로 전파 + `projects.status` 캐시 갱신 |
|
|
| `complete_stage(cursor, project_id, stage_no)` | COMPLETE 전이 (stage 6 완료 시 `projects.status='DONE'`) |
|
|
| `fail_stage(cursor, project_id, stage_no, message)` | FAILED 전이 |
|
|
| `update_stage_progress(cursor, project_id, stage_no, progress)` | 진행률만 갱신 |
|
|
| `get_workflow_state(cursor, project_id)` | 단건 조회, `current_stage` 계산 포함 |
|
|
| `reset_stages_after_input_change(cursor, project_id)` | B03 입력 변경 시 stage 1~6을 NOT_STARTED로 초기화 |
|
|
|
|
## 무효화의 실제 범위
|
|
|
|
| 처리 | 범위 |
|
|
|---|---|
|
|
| `start_stage()` | 뒤쪽 단계 중 `COMPLETE`만 `STALE`로 변경 |
|
|
| 공통 상태 유틸 | 단계 산출 파일·캐시를 삭제하지 않음 |
|
|
| 산출물 정리 | B03/B04/B05/B08 등 단계별 로직에 의존 |
|
|
| `workflow.json` | 초기 파일과 일부 호환 용도; DB workflow의 SSOT가 아님 |
|
|
|
|
## 조회 API
|
|
`GET /api/projects/{project_id}/workflow-state`
|
|
|
|
## 프론트엔드 게이팅 및 스텝바 연동
|
|
* **스텝바 일원화**: `createStepBar` 컴포넌트(`ui_template_workflow_layout.ts`)를 승격하여 B01 및 B03~B09에서 통합 관리.
|
|
* **게이팅 규칙**: B06 확정 후 B07로 이동한다. B07은 산출물 검사 없이 stage 4를 완료 처리하는 임시 우회다.
|
|
* **네비게이션**: `b_workflow_nav.ts` 모듈을 통해 `fetchWorkflowState`, `goToWorkflowStage` 공통 헬퍼 이용.
|