90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
from fastapi.responses import JSONResponse
|
|
from pydantic import BaseModel
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from db_setup import get_session
|
|
from saved_search.views import SavedSearch
|
|
from users.permissions import CurrentUser
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class SavedSearchCreate(BaseModel):
|
|
name: str
|
|
entity: str
|
|
filters: dict | None = None
|
|
|
|
|
|
class SavedSearchUpdate(BaseModel):
|
|
name: str | None = None
|
|
entity: str | None = None
|
|
filters: dict | None = None
|
|
|
|
|
|
@router.get("/saved-searches/fetch")
|
|
async def fetch_saved_searches(
|
|
current_user: CurrentUser,
|
|
entity: str | None = Query(None),
|
|
session: AsyncSession = Depends(get_session),
|
|
):
|
|
try:
|
|
service = SavedSearch(session=session)
|
|
data, total = await service.get_saved_searches(current_user, entity)
|
|
return JSONResponse(content={"data": data, "total": total, "status_code": 200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.post("/saved-searches/create")
|
|
async def create_saved_search(
|
|
payload: SavedSearchCreate,
|
|
current_user: CurrentUser,
|
|
session: AsyncSession = Depends(get_session),
|
|
):
|
|
try:
|
|
service = SavedSearch(session=session)
|
|
data = await service.create_saved_search(payload.model_dump(exclude_unset=True), current_user)
|
|
return JSONResponse(content={"data": data, "status_code": 200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.patch("/saved-searches/update")
|
|
async def update_saved_search(
|
|
payload: SavedSearchUpdate,
|
|
current_user: CurrentUser,
|
|
record_id: str = Query(...),
|
|
session: AsyncSession = Depends(get_session),
|
|
):
|
|
try:
|
|
service = SavedSearch(session=session)
|
|
data = await service.update_saved_search(
|
|
record_id, payload.model_dump(exclude_unset=True), current_user
|
|
)
|
|
return JSONResponse(content={"data": data, "status_code": 200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.delete("/saved-searches/delete")
|
|
async def delete_saved_search(
|
|
current_user: CurrentUser,
|
|
record_id: str = Query(...),
|
|
session: AsyncSession = Depends(get_session),
|
|
):
|
|
try:
|
|
service = SavedSearch(session=session)
|
|
data = await service.delete_saved_search(record_id, current_user)
|
|
return JSONResponse(content={"data": data, "status_code": 200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|