from __future__ import annotations from datetime import datetime from pydantic import BaseModel class FileSummary(BaseModel): id: str directory_id: str name: str mime_type: str | None size_bytes: int current_version_id: str | None created_at: datetime updated_at: datetime class PreviewArtifactSummary(BaseModel): id: str artifact_type: str blob_id: str status: str created_at: datetime updated_at: datetime class FileReplicaSummary(BaseModel): id: str blob_id: str backend_id: str backend_name: str backend_type: str backend_stability_class: str backend_enabled: bool storage_key: str status: str size_bytes: int checksum: str | None etag: str | None last_verified_at: datetime | None created_at: datetime updated_at: datetime class FilePlacementBackendSummary(BaseModel): id: str name: str type: str stability_class: str read_priority: int write_priority: int is_enabled: bool class FileDetailResponse(BaseModel): file: FileSummary preview_artifacts: list[PreviewArtifactSummary] = [] replicas: list[FileReplicaSummary] = [] placement_file_class: str | None = None desired_backends: list[FilePlacementBackendSummary] = [] ready_replica_backend_ids: list[str] = [] missing_backend_ids: list[str] = [] class DeletedFileSummary(FileSummary): deleted_at: datetime class RecycleBinResponse(BaseModel): items: list[DeletedFileSummary] class FileMutationResponse(BaseModel): ok: bool = True file: FileSummary | DeletedFileSummary class RenameFileRequest(BaseModel): name: str class MoveFileRequest(BaseModel): target_parent_id: str