diff --git a/app/api/routes/scouts.py b/app/api/routes/scouts.py index 81e6552..68a64b4 100644 --- a/app/api/routes/scouts.py +++ b/app/api/routes/scouts.py @@ -26,7 +26,7 @@ from datetime import datetime, timezone from fastapi import APIRouter, Depends, HTTPException, status from fastapi.responses import RedirectResponse -from sqlalchemy import func, select +from sqlalchemy import delete as sa_delete, func, select from sqlalchemy.ext.asyncio import AsyncSession from pydantic import BaseModel @@ -371,7 +371,12 @@ async def delete_cloud_scout( scout = await db.get(CloudScoutConfig, scout_id) if scout is None or scout.user_id != current_user.id: raise HTTPException(status.HTTP_404_NOT_FOUND, "Scout not found") - await db.delete(scout) + # Core deletes bypass the polymorphic ScoutRunLog relationship whose + # varchar scout_id vs uuid id join is not directly comparable in Postgres. + # scout_run_logs.scout_id is a plain string (matches the str scout_id); + # scout_triage_queue rows cascade automatically via their FK ondelete. + await db.execute(sa_delete(ScoutRunLog).where(ScoutRunLog.scout_id == scout_id)) + await db.execute(sa_delete(CloudScoutConfig).where(CloudScoutConfig.id == scout_id)) await db.commit() return {"ok": True}