Spaces:
Sleeping
Sleeping
from fastapi import APIRouter, Depends, HTTPException | |
from motor.motor_asyncio import AsyncIOMotorDatabase | |
from src.core.database import mongo_db | |
from src.models.mongo.interview_history_model import InterviewHistoryModel | |
from pydantic import BaseModel, Field | |
from typing import Optional, List, Dict, Any | |
from bson import ObjectId | |
router = APIRouter() | |
class InterviewHistoryCreate(BaseModel): | |
user_id: str | |
cv_id: str | |
job_offer_id: str | |
conversation: List[Dict[str, Any]] | |
start_time: str | |
end_time: Optional[str] = None | |
class InterviewHistoryUpdate(BaseModel): | |
conversation: Optional[List[Dict[str, Any]]] = None | |
end_time: Optional[str] = None | |
class InterviewHistoryResponse(BaseModel): | |
id: str = Field(alias="_id") | |
user_id: str | |
cv_id: str | |
job_offer_id: str | |
conversation: List[Dict[str, Any]] | |
start_time: str | |
end_time: Optional[str] = None | |
class Config: | |
populate_by_name = True | |
json_encoders = {ObjectId: str} | |
async def create_interview_history(history: InterviewHistoryCreate, db: AsyncIOMotorDatabase = Depends(lambda: mongo_db)): | |
history_entry = InterviewHistoryModel(**history.model_dump(by_alias=True)) | |
history_id = await InterviewHistoryModel.create(db, InterviewHistoryModel.collection_name, history_entry.model_dump(exclude_unset=True)) | |
history_entry.id = history_id | |
return history_entry | |
async def get_interview_history_by_id(history_id: str, db: AsyncIOMotorDatabase = Depends(lambda: mongo_db)): | |
history = await InterviewHistoryModel.get(db, InterviewHistoryModel.collection_name, {"_id": history_id}) | |
if history is None: | |
raise HTTPException(status_code=404, detail="Interview history not found") | |
return history | |
async def update_interview_history(history_id: str, history: InterviewHistoryUpdate, db: AsyncIOMotorDatabase = Depends(lambda: mongo_db)): | |
await InterviewHistoryModel.update(db, InterviewHistoryModel.collection_name, {"_id": history_id}, history.model_dump(exclude_unset=True)) | |
return await get_interview_history_by_id(history_id, db) | |