From c9b65f72aab132587e30afe172cc0732aea4264e Mon Sep 17 00:00:00 2001 From: sauravniraula Date: Thu, 17 Jul 2025 12:47:14 +0545 Subject: [PATCH] feat(fastapi): adds presentation update endpoint --- .../api/v1/ppt/endpoints/presentation.py | 28 +++++++++++++++++++ .../models/presentation_with_slides.py | 4 +++ 2 files changed, 32 insertions(+) diff --git a/servers/fastapi/api/v1/ppt/endpoints/presentation.py b/servers/fastapi/api/v1/ppt/endpoints/presentation.py index 69993e3f..2c313573 100644 --- a/servers/fastapi/api/v1/ppt/endpoints/presentation.py +++ b/servers/fastapi/api/v1/ppt/endpoints/presentation.py @@ -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, + ) diff --git a/servers/fastapi/models/presentation_with_slides.py b/servers/fastapi/models/presentation_with_slides.py index 76f6cf0e..bda5eb5f 100644 --- a/servers/fastapi/models/presentation_with_slides.py +++ b/servers/fastapi/models/presentation_with_slides.py @@ -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())