presenton/servers/fastapi/api/routers/presentation/handlers/upload_presentation_thumbnail.py
2025-06-23 15:13:04 +05:45

59 lines
2 KiB
Python

import os
import uuid
from fastapi import UploadFile
from api.models import LogMetadata
from api.routers.presentation.models import PresentationAndPath
from api.services.logging import LoggingService
from api.services.instances import TEMP_FILE_SERVICE
from api.sql_models import PresentationSqlModel
from api.services.database import get_sql_session
from api.utils.utils import get_presentation_dir
class UploadPresentationThumbnailHandler:
def __init__(self, presentation_id: str, thumbnail: UploadFile):
self.presentation_id = presentation_id
self.thumbnail = thumbnail
self.session = str(uuid.uuid4())
self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session)
self.presentation_dir = get_presentation_dir(self.presentation_id)
def __del__(self):
TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir)
async def post(self, logging_service: LoggingService, log_metadata: LogMetadata):
logging_service.logger.info(
logging_service.message(
{
"presentation_id": self.presentation_id,
"thumbnail": self.thumbnail,
}
),
extra=log_metadata.model_dump(),
)
with get_sql_session() as sql_session:
presentation = sql_session.get(PresentationSqlModel, self.presentation_id)
with open(os.path.join(self.presentation_dir, "thumbnail.jpg"), "wb") as f:
f.write(await self.thumbnail.read())
presentation.thumbnail = os.path.join(
self.presentation_dir, "thumbnail.jpg"
)
sql_session.commit()
sql_session.refresh(presentation)
response = PresentationAndPath(
presentation_id=self.presentation_id, path=presentation.thumbnail
)
logging_service.logger.info(
logging_service.message(response.model_dump(mode="json")),
extra=log_metadata.model_dump(),
)
return response