file uploader logic

This commit is contained in:
Robert 2024-03-03 17:58:43 +07:00
parent da227262ac
commit 54f2370cf5
No known key found for this signature in database
GPG Key ID: F631C7FD957D5F22
2 changed files with 66 additions and 0 deletions

View File

@ -0,0 +1,21 @@
from chain_service.services.file_uploader import FileUploaderService
from .planfix_client import PlanfixClientDependency
from .uploaded_file_repository import UploadedFileRepositoryDependency
from fastapi import Depends
from typing import Annotated
def get_file_uploader_service(
planfix_client: PlanfixClientDependency,
uploaded_file_repository: UploadedFileRepositoryDependency,
) -> FileUploaderService:
return FileUploaderService(
planfix_client=planfix_client, uploaded_file_repository=uploaded_file_repository
)
FileUploaderServiceDependency = Annotated[
FileUploaderService, Depends(get_file_uploader_service)
]

View File

@ -0,0 +1,45 @@
from chain_service.database.models.chain import Chain
from chain_service.database.models.uploaded_file import UploadedFile
from chain_service.repositories.uploaded_file import UploadedFileRepository
from loguru import logger
from planfix_client import PlanfixClient
from planfix_client.exceptions import PlanfixAPIError
class FileUploaderService:
def __init__(
self,
planfix_client: PlanfixClient,
uploaded_file_repository: UploadedFileRepository,
):
self.planfix_client = planfix_client
self.uploaded_file_repository = uploaded_file_repository
async def upload_from_chain(self, chain: Chain):
files_to_upload = list()
for action in chain.actions:
file_urls_to_upload = [*files_to_upload, *action.file_urls]
for file_url in file_urls_to_upload:
await self.upload_file_by_url(file_url)
async def upload_file_by_url(self, file_url: str):
try:
uploaded_file = await self.uploaded_file_repository.get_by_file_url(
file_url
)
if uploaded_file:
return
uploaded_file_id = await self.planfix_client.upload_file_from_url(file_url)
await self.uploaded_file_repository.upsert(
UploadedFile(file_id=uploaded_file_id, file_url=file_url)
)
except PlanfixAPIError:
logger.exception(f"Error while uploading to planfix {file_url=}")