diff --git a/scene_search/api.py b/scene_search/api.py index f7fdf23..a8f8e6c 100644 --- a/scene_search/api.py +++ b/scene_search/api.py @@ -15,7 +15,7 @@ from .database import connect, init_db from .frame_source import FrameSource from .index_jobs import IndexJobManager from .overview_jobs import OverviewJobManager -from .overviews import overview_inventory +from .overviews import overview_inventory, edit_overview from .search_service import SearchService WEB_INDEX_PATH = Path(__file__).parent / "web" / "index.html" @@ -51,6 +51,11 @@ class CaptionRequest(BaseModel): folder_path: str | None = None +class OverviewEditRequest(BaseModel): + expected_overview: str + overview: str = Field(min_length=1, max_length=12000) + + class OverviewRequest(BaseModel): action: str media_id: str | None = None @@ -391,6 +396,21 @@ def overview_items( raise HTTPException(status_code=400, detail=str(exc)) from exc +@app.patch("/api/overviews/{media_id}", dependencies=[Depends(require_api_key)]) +def overview_edit(media_id: str, request: OverviewEditRequest) -> dict: + if get_overview_jobs().running or get_index_jobs().running: + raise HTTPException(status_code=409, detail="Wait until Overview/indexing jobs finish") + try: + return edit_overview( + db_path=settings.db_path, media_id=media_id, + expected_overview=request.expected_overview, overview=request.overview, + ) + except ValueError as exc: + raise HTTPException(status_code=400, detail=str(exc)) from exc + except RuntimeError as exc: + raise HTTPException(status_code=409, detail=str(exc)) from exc + + @app.get("/api/overviews/status", dependencies=[Depends(require_api_key)]) def overview_status() -> dict: return get_overview_jobs().status()