data_access / src /services /cv_router.py
QuentinL52's picture
Update src/services/cv_router.py
5ef8a6a verified
raw
history blame
1.62 kB
from fastapi import APIRouter, Depends, HTTPException
from motor.motor_asyncio import AsyncIOMotorDatabase
from src.core.database import mongo_db
from src.models.mongo.cv_model import CVModel
from pydantic import BaseModel, Field
from typing import Optional, Dict, Any
from bson import ObjectId
router = APIRouter()
class CVCreate(BaseModel):
user_id: str
parsed_data: Dict[str, Any]
raw_text: Optional[str] = None
upload_date: str
class CVResponse(BaseModel):
id: str = Field(alias="_id")
user_id: str
parsed_data: Dict[str, Any]
raw_text: Optional[str] = None
upload_date: str
class Config:
populate_by_name = True
json_encoders = {ObjectId: str}
@router.post("/cvs", response_model=CVResponse)
async def create_cv(cv: CVCreate, db: AsyncIOMotorDatabase = Depends(lambda: mongo_db)):
# Préparer les données pour l'insertion
cv_data = cv.model_dump(exclude_unset=True)
# Insérer dans MongoDB et récupérer l'ID
cv_id = await CVModel.create(db, "cv", cv_data)
# Créer la réponse avec l'ID
response_data = {
"id": cv_id,
"user_id": cv.user_id,
"parsed_data": cv.parsed_data,
"raw_text": cv.raw_text,
"upload_date": cv.upload_date
}
return CVResponse(**response_data)
@router.get("/cvs/{cv_id}", response_model=CVResponse)
async def get_cv_by_id(cv_id: str, db: AsyncIOMotorDatabase = Depends(lambda: mongo_db)):
cv = await CVModel.get(db, "cv", {"_id": cv_id})
if cv is None:
raise HTTPException(status_code=404, detail="CV not found")
return cv