diff --git a/chain_service/database/models/uploaded_file.py b/chain_service/database/models/uploaded_file.py new file mode 100644 index 0000000..226ac46 --- /dev/null +++ b/chain_service/database/models/uploaded_file.py @@ -0,0 +1,6 @@ +from .base import BaseMongoModel + + +class UploadedFile(BaseMongoModel): + file_id: int + file_url: str diff --git a/chain_service/dependencies/uploaded_file_repository.py b/chain_service/dependencies/uploaded_file_repository.py new file mode 100644 index 0000000..d173718 --- /dev/null +++ b/chain_service/dependencies/uploaded_file_repository.py @@ -0,0 +1,16 @@ +from .database import DatabaseDependency +from chain_service.repositories.uploaded_file import UploadedFileRepository + +from fastapi import Depends +from typing import Annotated + + +def get_uploaded_file_repository( + database: DatabaseDependency, +) -> UploadedFileRepository: + return UploadedFileRepository(database=database) + + +UploadedFileRepositoryDependency = Annotated[ + UploadedFileRepository, Depends(get_uploaded_file_repository) +] diff --git a/chain_service/repositories/uploaded_file.py b/chain_service/repositories/uploaded_file.py new file mode 100644 index 0000000..f51565d --- /dev/null +++ b/chain_service/repositories/uploaded_file.py @@ -0,0 +1,19 @@ +from chain_service.database.database import Database +from chain_service.database.models.uploaded_file import UploadedFile + + +class UploadedFileRepository: + + def __init__(self, database: Database): + self.collection = database.get_collection("uploaded_files") + + async def upsert(self, uploaded_file: UploadedFile) -> UploadedFile: + query = {"_id": uploaded_file.id} + payload = uploaded_file.model_dump(by_alias=True) + await self.collection.replace_one(query, payload, upsert=True) + return uploaded_file + + async def get_by_file_url(self, file_url: str) -> UploadedFile | None: + query = {"fileUrl": file_url} + uploaded_file = await self.collection.find_one(query) + return UploadedFile.model_validate(uploaded_file) if uploaded_file else None