37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
import asyncio
|
|
|
|
from sqlmodel import select
|
|
from api.models import LogMetadata
|
|
from api.routers.presentation.models import PresentationAndSlides
|
|
from api.services.logging import LoggingService
|
|
from api.sql_models import PresentationSqlModel, SlideSqlModel
|
|
from api.services.database import get_sql_session
|
|
|
|
|
|
class GetPresentationHandler:
|
|
|
|
def __init__(self, id: str):
|
|
self.id = id
|
|
|
|
async def get(self, logging_service: LoggingService, log_metadata: LogMetadata):
|
|
|
|
logging_service.logger.info(
|
|
logging_service.message({"presentation": self.id}),
|
|
extra=log_metadata.model_dump(),
|
|
)
|
|
|
|
with get_sql_session() as sql_session:
|
|
presentation = sql_session.get(PresentationSqlModel, self.id)
|
|
slide_models = sql_session.exec(
|
|
select(SlideSqlModel).where(SlideSqlModel.presentation == self.id)
|
|
).all()
|
|
|
|
response = PresentationAndSlides(
|
|
presentation=presentation, slides=slide_models
|
|
).to_response_dict()
|
|
|
|
logging_service.logger.info(
|
|
logging_service.message(response),
|
|
extra=log_metadata.model_dump(),
|
|
)
|
|
return response
|