ai-talent-finder-backend / app /api /experiences.py
ilyass yani
Deploiement backend dans HF Spaces
9df97a2
Raw
History Blame Contribute Delete
4.08 kB
"""Experiences API routes - ÉTAPE 2 COMPLÉTION"""
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
from app.core.dependencies import get_db, get_current_user
from app.models.models import Experience, Candidate, User
from app.schemas.experience import ExperienceResponse, ExperienceCreate, ExperienceUpdate
router = APIRouter(prefix="/api/candidates/{candidate_id}/experiences", tags=["experiences"])
@router.get("/", response_model=List[ExperienceResponse])
def list_experiences(
candidate_id: int,
skip: int = 0,
limit: int = 100,
db: Session = Depends(get_db)
):
"""List all experiences for a candidate"""
# Verify candidate exists
candidate = db.query(Candidate).filter(Candidate.id == candidate_id).first()
if not candidate:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Candidate not found"
)
experiences = db.query(Experience).filter(
Experience.candidate_id == candidate_id
).offset(skip).limit(limit).all()
return experiences
@router.get("/{experience_id}", response_model=ExperienceResponse)
def get_experience(
candidate_id: int,
experience_id: int,
db: Session = Depends(get_db)
):
"""Get a specific experience"""
experience = db.query(Experience).filter(
Experience.id == experience_id,
Experience.candidate_id == candidate_id
).first()
if not experience:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Experience not found"
)
return experience
@router.post("/", response_model=ExperienceResponse, status_code=status.HTTP_201_CREATED)
def create_experience(
candidate_id: int,
experience: ExperienceCreate,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""Create a new experience for a candidate"""
# Verify candidate exists
candidate = db.query(Candidate).filter(Candidate.id == candidate_id).first()
if not candidate:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Candidate not found"
)
db_experience = Experience(
candidate_id=candidate_id,
title=experience.title,
company=experience.company,
duration_months=experience.duration_months,
description=experience.description
)
db.add(db_experience)
db.commit()
db.refresh(db_experience)
return db_experience
@router.put("/{experience_id}", response_model=ExperienceResponse)
def update_experience(
candidate_id: int,
experience_id: int,
experience: ExperienceUpdate,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""Update an experience"""
db_experience = db.query(Experience).filter(
Experience.id == experience_id,
Experience.candidate_id == candidate_id
).first()
if not db_experience:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Experience not found"
)
# Update only provided fields
update_data = experience.dict(exclude_unset=True)
for key, value in update_data.items():
setattr(db_experience, key, value)
db.commit()
db.refresh(db_experience)
return db_experience
@router.delete("/{experience_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_experience(
candidate_id: int,
experience_id: int,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""Delete an experience"""
db_experience = db.query(Experience).filter(
Experience.id == experience_id,
Experience.candidate_id == candidate_id
).first()
if not db_experience:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Experience not found"
)
db.delete(db_experience)
db.commit()