43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
from fastapi import HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from job.candidate.models import Interviews
|
|
from job.interviews.serializers import serialize_interview
|
|
|
|
|
|
class Interview:
|
|
def __init__(self,session:AsyncSession):
|
|
self.session=session
|
|
|
|
async def get_interview(self,interview_id=None,inbox_id=None):
|
|
if interview_id:
|
|
row=await Interviews.get_interview_by_id(self.session,interview_id)
|
|
if not row:
|
|
raise HTTPException(status_code=404,detail="Interview not found")
|
|
return serialize_interview(row)
|
|
if inbox_id is None:
|
|
raise HTTPException(status_code=400,detail="interview_id or inbox_id is required")
|
|
rows=await Interviews.get_interviews_by_inbox(self.session,int(inbox_id))
|
|
return [serialize_interview(r) for r in rows]
|
|
|
|
async def create_interview(self,payload):
|
|
fields={
|
|
"interview_date":payload.get("interview_date"),
|
|
"interview_time":payload.get("interview_time"),
|
|
"interview_type":payload.get("interview_type") or "",
|
|
"interview_status":payload.get("interview_status") or "",
|
|
"inbox_id":payload.get("inbox_id"),
|
|
}
|
|
fields={k:v for k,v in fields.items() if v is not None}
|
|
row=await Interviews.insert_interview(self.session,fields)
|
|
return serialize_interview(row)
|
|
|
|
async def update_interview(self,interview_id,payload):
|
|
fields={k:v for k,v in payload.items() if v is not None}
|
|
if not fields:
|
|
raise HTTPException(status_code=400,detail="No fields to update")
|
|
row=await Interviews.update_interview(self.session,interview_id,fields)
|
|
if not row:
|
|
raise HTTPException(status_code=404,detail="Interview not found")
|
|
return serialize_interview(row)
|