fix(B03): rerun analysis on reupload
Clear derived browser caches so B05 loads the newly generated route and section data.
This commit is contained in:
@@ -54,6 +54,7 @@ from B03_FileInput.B03_FileInput_Schema import (
|
||||
)
|
||||
from B03_FileInput.B03_FileInput_Service_WF1 import trigger_wf1_analysis_and_email
|
||||
from common_util.common_util_auth import verify_session
|
||||
from common_util.common_util_initial_snapshot import clear_designing, discard_initial_snapshot
|
||||
from common_util.common_util_json import atomic_write_json
|
||||
from common_util.common_util_project_reset import purge_project_outputs
|
||||
from common_util.common_util_storage import resolve_stored_project_path
|
||||
@@ -160,9 +161,10 @@ async def _complete_file_input_if_ready(
|
||||
# 자료가 갈렸으니 옛 계산 결과(파일 + DB)를 지우고 진행 표시도 되돌린다. 남겨 두면
|
||||
# 아직 다시 만들어지지 않은 뒷단계 화면이 옛 결과를 새 자료 것인 양 보여준다.
|
||||
stored_path = await get_project_storage_relative_path(connection, project_id)
|
||||
await purge_project_outputs(
|
||||
connection, str(project_id), Path(resolve_stored_project_path(stored_path))
|
||||
)
|
||||
project_root = Path(resolve_stored_project_path(stored_path))
|
||||
clear_designing(project_root)
|
||||
discard_initial_snapshot(project_root)
|
||||
await purge_project_outputs(connection, str(project_id), project_root)
|
||||
async with connection.cursor(aiomysql.DictCursor) as cursor:
|
||||
await reset_stages_after_input_change(cursor, str(project_id))
|
||||
await complete_stage(cursor, str(project_id), 0)
|
||||
@@ -429,11 +431,14 @@ async def upload_project_files(
|
||||
async def create_project_upload_session(
|
||||
project_id: UUID,
|
||||
payload: ChunkSessionCreateRequest,
|
||||
session: dict[str, Any] = Depends(verify_session),
|
||||
) -> ChunkSessionCreateResponse | JSONResponse:
|
||||
"""대용량 파일 청크 업로드 세션을 생성한다."""
|
||||
chunk_size_bytes = min(payload.chunk_size_bytes, UPLOAD_CHUNK_SIZE_BYTES)
|
||||
total_chunks = _total_chunks(payload.size_bytes, chunk_size_bytes)
|
||||
session_id = str(uuid4())
|
||||
point_cloud_input_id: int | None = None
|
||||
skipped: ChunkSessionCreateResponse | None = None
|
||||
|
||||
pool = get_db_pool()
|
||||
try:
|
||||
@@ -449,16 +454,38 @@ async def create_project_upload_session(
|
||||
)
|
||||
skipped = await _already_uploaded(connection, project_id, payload)
|
||||
if skipped is not None:
|
||||
return skipped
|
||||
await create_upload_session(
|
||||
connection,
|
||||
session_id=session_id,
|
||||
project_id=project_id,
|
||||
original_filename=payload.original_filename,
|
||||
file_size_bytes=payload.size_bytes,
|
||||
chunk_size_bytes=chunk_size_bytes,
|
||||
total_chunks=total_chunks,
|
||||
)
|
||||
if payload.complete_upload:
|
||||
await connection.begin()
|
||||
try:
|
||||
point_cloud_input_id = await _complete_file_input_if_ready(
|
||||
connection,
|
||||
project_id,
|
||||
)
|
||||
await connection.commit()
|
||||
except Exception:
|
||||
await connection.rollback()
|
||||
raise
|
||||
else:
|
||||
await create_upload_session(
|
||||
connection,
|
||||
session_id=session_id,
|
||||
project_id=project_id,
|
||||
original_filename=payload.original_filename,
|
||||
file_size_bytes=payload.size_bytes,
|
||||
chunk_size_bytes=chunk_size_bytes,
|
||||
total_chunks=total_chunks,
|
||||
)
|
||||
if skipped is not None:
|
||||
if point_cloud_input_id is not None:
|
||||
_schedule_background_task(
|
||||
trigger_wf1_analysis_and_email(
|
||||
project_id=project_id,
|
||||
input_file_id=point_cloud_input_id,
|
||||
user_role=str(session["role"]),
|
||||
),
|
||||
task_name=f"b04-preprocess-auto-{project_id}",
|
||||
)
|
||||
return skipped
|
||||
return ChunkSessionCreateResponse(
|
||||
project_id=str(project_id),
|
||||
upload_session_id=session_id,
|
||||
|
||||
Reference in New Issue
Block a user