feat(B03): 업로드 잠금에 이름을 붙임 — 지금 누가 올리는 중인지 화면에 뜸
계획서 0-8 의 남은 하나. 서버는 분석이 도는 동안 새 자료를 이미 막고 있었고 (`is_analysis_running`), 없던 것은 **막힌 까닭을 사람에게 보이는 것**이었음. 여럿이 한 프로젝트를 보면 「왜 안 올라가지」가 됨. - 분석을 띄우는 **경로 넷 모두** 시작한 사람을 `params.started_by` 로 담음. - `analysis_lock_owner` 가 그 id 로 이름을 붙여 냄 — 옛 자료는 id 가 없어 **이름 없이 잠금만** 돎(막는 것이 먼저). - `/upload-overview` 응답에 `analysis_lock` 을 실어 B03 화면이 띠로 보임. 화면 실측 — 「엄상돈 님이 올린 자료를 분석하는 중입니다」 띠가 경고색으로 뜸(응답을 잠깐 가로채 확인하고 곧바로 되돌림). 지금 도는 분석이 없어 실제 잠금 화면은 다음 업로드 때 볼 것. 시험 넷 추가(도는 중 아님·이름 붙음·옛 자료·경로 넷 대조), 전체 1211 통과·실패 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -106,6 +106,7 @@ from B03_FileInput.B03_FileInput_Schema import (
|
||||
FileUploadDescriptor,
|
||||
FileUploadResponse,
|
||||
UploadedFileResult,
|
||||
UploadLockInfo,
|
||||
UploadOverviewFile,
|
||||
UploadOverviewResponse,
|
||||
UploadOverviewSession,
|
||||
@@ -116,6 +117,7 @@ from common_util.common_util_json import atomic_write_json
|
||||
from common_util.common_util_storage import resolve_stored_project_path
|
||||
from common_util.common_util_workflow import load_project_workflow
|
||||
from common_util.common_util_workflow_state import (
|
||||
analysis_lock_owner,
|
||||
get_workflow_state,
|
||||
is_analysis_running,
|
||||
)
|
||||
@@ -283,6 +285,7 @@ async def upload_project_files(
|
||||
project_id=project_id,
|
||||
input_file_id=point_cloud_input_id,
|
||||
user_role=str(session["role"]),
|
||||
started_by=session.get("user_id"),
|
||||
),
|
||||
task_name=f"b04-preprocess-auto-{project_id}",
|
||||
)
|
||||
@@ -343,6 +346,8 @@ async def get_project_upload_overview(
|
||||
)
|
||||
async with connection.cursor(aiomysql.DictCursor) as cursor:
|
||||
state = await get_workflow_state(cursor, str(project_id))
|
||||
# 「누가 올리는 중인지」 — 서버가 막는 것과 화면이 알리는 것이 한 값에서 나온다.
|
||||
lock = await analysis_lock_owner(cursor, str(project_id))
|
||||
stages = (state or {}).get("stages") or []
|
||||
analysis_complete = any(
|
||||
int(stage.get("stage_no", -1)) == 1 and str(stage.get("state")) == "COMPLETE"
|
||||
@@ -386,6 +391,7 @@ async def get_project_upload_overview(
|
||||
required_complete=stage0_complete
|
||||
or (_REQUIRED_FILE_TYPES <= file_types and point_cloud_id is not None),
|
||||
analysis_complete=analysis_complete,
|
||||
analysis_lock=UploadLockInfo(**lock) if lock else None,
|
||||
)
|
||||
except Exception:
|
||||
logger.exception("B03 업로드 현황 조회 실패: project_id=%s", project_id)
|
||||
|
||||
Reference in New Issue
Block a user