Merge pull request #88 from presenton/feat/presentation_udpate

feat(fastapi): adds presentation update endpoint
This commit is contained in:
Saurav Niraula 2025-07-17 12:54:31 +05:45 committed by GitHub
commit 6d8908e81d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 0 deletions

View file

@ -5,6 +5,7 @@ from typing import Annotated, List, Optional
import uuid
from fastapi import APIRouter, Body, HTTPException
from fastapi.responses import StreamingResponse
from sqlalchemy import delete
from sqlmodel import select
from models.presentation_outline_model import SlideOutlineModel
@ -243,3 +244,30 @@ async def stream_presentation(presentation_id: str):
).to_string()
return StreamingResponse(inner(), media_type="text/event-stream")
@PRESENTATION_ROUTER.put("/update", response_model=PresentationWithSlides)
def update_presentation(
presentation_with_slides: Annotated[PresentationWithSlides, Body()],
):
updated_presentation = presentation_with_slides.to_presentation_model()
updated_slides = presentation_with_slides.slides
with get_sql_session() as sql_session:
presentation = sql_session.get(PresentationModel, updated_presentation.id)
if not presentation:
raise HTTPException(status_code=404, detail="Presentation not found")
presentation.sqlmodel_update(updated_presentation)
sql_session.exec(
delete(SlideModel).where(SlideModel.presentation == updated_presentation.id)
)
sql_session.add_all(updated_slides)
sql_session.commit()
sql_session.refresh(presentation)
for slide in updated_slides:
sql_session.refresh(slide)
return PresentationWithSlides(
**presentation.model_dump(),
slides=updated_slides,
)

View file

@ -6,6 +6,7 @@ from pydantic import BaseModel
from models.presentation_layout import PresentationLayoutModel
from models.presentation_outline_model import SlideOutlineModel
from models.presentation_structure_model import PresentationStructureModel
from models.sql.presentation import PresentationModel
from models.sql.slide import SlideModel
@ -23,3 +24,6 @@ class PresentationWithSlides(BaseModel):
layout: PresentationLayoutModel
structure: Optional[PresentationStructureModel]
slides: List[SlideModel]
def to_presentation_model(self) -> PresentationModel:
return PresentationModel(**self.model_dump())