From bfa1b028b3285d502000475a9147ecd8e59be143 Mon Sep 17 00:00:00 2001 From: ajaysi Date: Mon, 20 Apr 2026 06:31:59 +0530 Subject: [PATCH] Fix: Upsert pattern for project update - create if not exists --- backend/api/podcast/handlers/projects.py | 29 ++++++++++++++++++------ 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/backend/api/podcast/handlers/projects.py b/backend/api/podcast/handlers/projects.py index 9931df3e..b48896a3 100644 --- a/backend/api/podcast/handlers/projects.py +++ b/backend/api/podcast/handlers/projects.py @@ -116,13 +116,28 @@ async def update_project( service = PodcastService(db) - # Convert request to dict, excluding None values - updates = request.model_dump(exclude_unset=True) - - project = service.update_project(user_id, project_id, **updates) - - if not project: - raise HTTPException(status_code=404, detail=f"Project {project_id} not found") + # Check if project exists; if not, create it (upsert behavior for resilience) + existing = service.get_project(user_id, project_id) + if not existing: + logger.warning(f"[Podcast] Project {project_id} not found for user {user_id}, creating new project with default values") + # Try to create the project - this handles cases where create succeeded but wasn't found later + # (can happen with user_id mismatch or after session refresh) + try: + project = service.create_project( + user_id=user_id, + project_id=project_id, + idea="Untitled Podcast", + status="scripting", # Assume we're updating an existing project + duration=10, + speakers=1, + ) + except Exception as create_err: + logger.error(f"[Podcast] Failed to create project {project_id}: {create_err}") + raise HTTPException(status_code=404, detail=f"Project {project_id} not found and could not create: {create_err}") + else: + # Convert request to dict, excluding None values + updates = request.model_dump(exclude_unset=True) + project = service.update_project(user_id, project_id, **updates) return PodcastProjectResponse.model_validate(project) except HTTPException: