HR-ATS-Portal/backend/saved_search/app.py

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))