109 lines
3.8 KiB
Python
109 lines
3.8 KiB
Python
import uuid
|
|
from typing import Optional
|
|
|
|
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 users.permissions import PermissionTag, require_permission
|
|
from verification_check.enums import (
|
|
CompetencyEvaluation,
|
|
EmploymentVerification,
|
|
QualitativeEvaluation,
|
|
RecordOverview,
|
|
RefereeDetails,
|
|
)
|
|
from verification_check.views import VerificationCheckForm
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class VerificationCheckCreate(BaseModel):
|
|
recruiter_id:uuid.UUID
|
|
candidate_id:uuid.UUID
|
|
record_overview:Optional[RecordOverview]
|
|
employment_verification:Optional[EmploymentVerification]
|
|
competency_evaluation:Optional[CompetencyEvaluation]
|
|
qualitative_evaluation:Optional[QualitativeEvaluation]
|
|
referee:Optional[RefereeDetails]
|
|
|
|
|
|
class VerificationCheckUpdate(BaseModel):
|
|
recruiter_id:Optional[uuid.UUID]=None
|
|
candidate_id:Optional[uuid.UUID]=None
|
|
record_overview:Optional[RecordOverview]=None
|
|
employment_verification:Optional[EmploymentVerification]=None
|
|
competency_evaluation:Optional[CompetencyEvaluation]=None
|
|
qualitative_evaluation:Optional[QualitativeEvaluation]=None
|
|
referee:Optional[RefereeDetails]=None
|
|
|
|
|
|
@router.get("/verification-check/fetch")
|
|
async def fetch_verification_check(
|
|
current_user:dict=Depends(require_permission(PermissionTag.CANDIDATES_VIEW)),
|
|
form_id:str=Query(None),
|
|
candidate_id:str=Query(None),
|
|
session:AsyncSession=Depends(get_session),
|
|
):
|
|
"""One row by form_id, else the list (optionally one candidate's referees).
|
|
Admins see every row; other roles stay scoped to created_by."""
|
|
try:
|
|
service=VerificationCheckForm(session=session)
|
|
data=await service.get_form_by_id(form_id,candidate_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))
|
|
|
|
|
|
@router.post("/verification-check/create")
|
|
async def create_verification_check(
|
|
payload: VerificationCheckCreate,
|
|
current_user:dict=Depends(require_permission(PermissionTag.CANDIDATES_CREATE)),
|
|
session:AsyncSession=Depends(get_session),
|
|
):
|
|
try:
|
|
service = VerificationCheckForm(session=session)
|
|
data = await service.create_form(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("/verification-check/update")
|
|
async def update_verification_check(
|
|
payload: VerificationCheckUpdate,
|
|
current_user:dict=Depends(require_permission(PermissionTag.CANDIDATES_EDIT)),
|
|
form_id:str=Query(...),
|
|
session:AsyncSession=Depends(get_session),
|
|
):
|
|
try:
|
|
service=VerificationCheckForm(session=session)
|
|
data=await service.update_form(form_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("/verification-check/delete")
|
|
async def delete_verification_check(
|
|
current_user:dict=Depends(require_permission(PermissionTag.CANDIDATES_DELETE)),
|
|
form_id:str=Query(...),
|
|
session:AsyncSession=Depends(get_session),
|
|
):
|
|
try:
|
|
service=VerificationCheckForm(session=session)
|
|
data=await service.delete_form(form_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))
|