"""임시 보관함(프로젝트 생성 전 업로드) 요청·응답 모델.""" from typing import Any from pydantic import BaseModel, ConfigDict, Field class TempBatchCreateRequest(BaseModel): """보관함 묶음 생성 요청 — 프로젝트 등록 폼과 비슷하게 이름만 받는다.""" model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) name: str = Field(min_length=1, max_length=200) memo: str | None = Field(default=None, max_length=500) class TempBatchFile(BaseModel): """묶음 안의 저장 완료 파일 한 건.""" file_type: str original_filename: str file_size_bytes: int crs_epsg: int | None = None class TempBatchPendingSession(BaseModel): """중단된 청크 세션 — 보관함 리스트 행에 진행률로 보여 준다.""" upload_session_id: str original_filename: str file_size_bytes: int total_chunks: int completed_chunks: int progress_percent: float class TempBatchItem(BaseModel): """보관함 목록의 묶음 한 건.""" batch_id: str name: str memo: str | None = None status: str files: list[TempBatchFile] pending_sessions: list[TempBatchPendingSession] total_size_bytes: int required_complete: bool completed_at: str | None = None expires_at: str | None = None linked_project_id: str | None = None created_at: str | None = None class TempBatchListResponse(BaseModel): """내 보관함 전체 목록.""" status: str = "success" batches: list[TempBatchItem] retention_days: int class TempBatchCreateResponse(BaseModel): """묶음 생성 응답.""" status: str = "success" batch_id: str name: str class TempFileUploadResult(BaseModel): """보관함에 저장된 파일 한 건.""" batch_id: str file_type: str original_filename: str relative_path: str size_bytes: int metadata: dict[str, Any] class TempFileUploadResponse(BaseModel): """보관함 업로드(일반·청크 공통) 응답.""" status: str = "success" batch_id: str files: list[TempFileUploadResult] required_complete: bool class TempBatchAttachResponse(BaseModel): """보관함 묶음을 프로젝트로 옮긴 결과.""" status: str = "success" project_id: str batch_id: str moved_files: int analysis_started: bool