import uuid from pathlib import Path import aiofiles from app.config import settings def _get_upload_dir(user_id: uuid.UUID, doc_id: uuid.UUID) -> Path: path = Path(settings.UPLOAD_DIR) / str(user_id) / str(doc_id) path.mkdir(parents=True, exist_ok=True) return path async def save_upload(user_id: uuid.UUID, doc_id: uuid.UUID, filename: str, content: bytes) -> str: directory = _get_upload_dir(user_id, doc_id) file_path = directory / filename async with aiofiles.open(file_path, "wb") as f: await f.write(content) return str(file_path) def get_file_path(storage_path: str) -> Path: return Path(storage_path) def delete_file(storage_path: str) -> None: path = Path(storage_path) if path.exists(): path.unlink() # Clean up empty parent dirs parent = path.parent if parent.exists() and not any(parent.iterdir()): parent.rmdir()