from abc import ABC, abstractmethod from pathlib import Path from app.storage.schemas import FileMetadata, StoredFileMetadata class StorageProvider(ABC): @abstractmethod def save_file( self, *, namespace: str, content: bytes, original_filename: str, stored_filename: str, mime_type: str, ) -> StoredFileMetadata: raise NotImplementedError @abstractmethod def open_file(self, storage_key: str) -> Path: raise NotImplementedError @abstractmethod def delete_file(self, storage_key: str) -> None: raise NotImplementedError @abstractmethod def file_exists(self, storage_key: str) -> bool: raise NotImplementedError @abstractmethod def get_file_metadata(self, storage_key: str) -> FileMetadata: raise NotImplementedError