61 lines
2.9 KiB
Python
61 lines
2.9 KiB
Python
from fastapi import HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from candidate_forms.plugins import _as_uuid, _aware, _user_id
|
|
from users.models import Users
|
|
from users.permissions import is_admin
|
|
from verification_check.models import VerificationCheck
|
|
from verification_check.serializers import serialize_verification_check
|
|
|
|
|
|
class VerificationCheckForm:
|
|
def __init__(self, session: AsyncSession):
|
|
self.session = session
|
|
|
|
async def _serialize_rows(self, rows):
|
|
user_ids = set()
|
|
for row in rows:
|
|
user_ids |= {row.recruiter_id, row.candidate_id, row.created_by}
|
|
names = await Users.names_by_ids(self.session, user_ids)
|
|
return [serialize_verification_check(row, names) for row in rows]
|
|
|
|
async def create_form(self, payload, current_user):
|
|
if payload.get("record_overview") and "date_time" in payload["record_overview"]:
|
|
payload["record_overview"]["date_time"] = _aware(payload["record_overview"]["date_time"])
|
|
payload["created_by"] = _user_id(current_user)
|
|
row = await VerificationCheck.insert_form(self.session, payload)
|
|
return (await self._serialize_rows([row]))[0]
|
|
|
|
async def update_form(self, form_id, payload, current_user):
|
|
_user_id(current_user)
|
|
row = await VerificationCheck.get_form_by_id(self.session, form_id)
|
|
if not row:
|
|
raise HTTPException(status_code=404, detail="Verification check not found")
|
|
if not payload:
|
|
raise HTTPException(status_code=400, detail="No fields to update")
|
|
if payload.get("record_overview") and "date_time" in payload["record_overview"]:
|
|
payload["record_overview"]["date_time"] = _aware(payload["record_overview"]["date_time"])
|
|
updated = await VerificationCheck.update_form(self.session, form_id, payload)
|
|
if not updated:
|
|
raise HTTPException(status_code=404, detail="Verification check not found")
|
|
return (await self._serialize_rows([updated]))[0]
|
|
|
|
async def get_form_by_id(self, form_id, candidate_id, current_user):
|
|
created_by = None if is_admin(current_user) else _user_id(current_user)
|
|
if form_id:
|
|
row = await VerificationCheck.get_form_by_id(self.session, record_id=form_id, created_by=created_by)
|
|
if not row:
|
|
raise HTTPException(status_code=404, detail="Verification check not found")
|
|
return (await self._serialize_rows([row]))[0]
|
|
rows = await VerificationCheck.get_form_by_id(
|
|
self.session, created_by=created_by, candidate_id=_as_uuid(candidate_id)
|
|
)
|
|
return await self._serialize_rows(rows)
|
|
|
|
async def delete_form(self, form_id, current_user):
|
|
_user_id(current_user)
|
|
row = await VerificationCheck.soft_delete_form(self.session, form_id)
|
|
if not row:
|
|
raise HTTPException(status_code=404, detail="Verification check not found")
|
|
return {"id": str(row.id), "deleted": True}
|