Merge pull request #88 from presenton/feat/presentation_udpate
feat(fastapi): adds presentation update endpoint
This commit is contained in:
commit
6d8908e81d
2 changed files with 32 additions and 0 deletions
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue