114 lines
3.9 KiB
Python
114 lines
3.9 KiB
Python
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
|
from app.core.session_middleware import get_current_session
|
|
from app.models.interview_report import InterviewReport
|
|
from app.models.session import Session
|
|
from app.services.interview_reports_service import InterviewReportService
|
|
|
|
router = APIRouter(prefix="/interview-reports", tags=["interview-reports"])
|
|
|
|
|
|
@router.get("/vacancy/{vacancy_id}", response_model=list[InterviewReport])
|
|
async def get_reports_by_vacancy(
|
|
vacancy_id: int,
|
|
current_session: Session = Depends(get_current_session),
|
|
report_service: InterviewReportService = Depends(InterviewReportService),
|
|
):
|
|
"""Получить все отчёты по вакансии"""
|
|
if not current_session:
|
|
raise HTTPException(status_code=401, detail="No active session")
|
|
|
|
reports = await report_service.get_reports_by_vacancy(vacancy_id)
|
|
return reports
|
|
|
|
|
|
@router.get("/session/{session_id}", response_model=InterviewReport)
|
|
async def get_report_by_session(
|
|
session_id: int,
|
|
current_session: Session = Depends(get_current_session),
|
|
report_service: InterviewReportService = Depends(InterviewReportService),
|
|
):
|
|
"""Получить отчёт по сессии интервью"""
|
|
if not current_session:
|
|
raise HTTPException(status_code=401, detail="No active session")
|
|
|
|
report = await report_service.get_report_by_session(session_id)
|
|
if not report:
|
|
raise HTTPException(status_code=404, detail="Report not found")
|
|
|
|
return report
|
|
|
|
|
|
@router.patch("/{report_id}/scores")
|
|
async def update_report_scores(
|
|
report_id: int,
|
|
scores: dict,
|
|
current_session: Session = Depends(get_current_session),
|
|
report_service: InterviewReportService = Depends(InterviewReportService),
|
|
):
|
|
"""Обновить оценки отчёта"""
|
|
if not current_session:
|
|
raise HTTPException(status_code=401, detail="No active session")
|
|
|
|
success = await report_service.update_report_scores(report_id, scores)
|
|
if not success:
|
|
raise HTTPException(status_code=500, detail="Failed to update report scores")
|
|
|
|
return {"message": "Report scores updated successfully"}
|
|
|
|
|
|
@router.patch("/{report_id}/notes")
|
|
async def update_report_notes(
|
|
report_id: int,
|
|
notes: str,
|
|
current_session: Session = Depends(get_current_session),
|
|
report_service: InterviewReportService = Depends(InterviewReportService),
|
|
):
|
|
"""Обновить заметки интервьюера"""
|
|
if not current_session:
|
|
raise HTTPException(status_code=401, detail="No active session")
|
|
|
|
success = await report_service.update_interviewer_notes(report_id, notes)
|
|
if not success:
|
|
raise HTTPException(
|
|
status_code=500, detail="Failed to update interviewer notes"
|
|
)
|
|
|
|
return {"message": "Interviewer notes updated successfully"}
|
|
|
|
|
|
@router.patch("/{report_id}/pdf")
|
|
async def update_report_pdf(
|
|
report_id: int,
|
|
pdf_url: str,
|
|
current_session: Session = Depends(get_current_session),
|
|
report_service: InterviewReportService = Depends(InterviewReportService),
|
|
):
|
|
"""Обновить PDF отчёта"""
|
|
if not current_session:
|
|
raise HTTPException(status_code=401, detail="No active session")
|
|
|
|
success = await report_service.update_pdf_url(report_id, pdf_url)
|
|
if not success:
|
|
raise HTTPException(status_code=500, detail="Failed to update PDF URL")
|
|
|
|
return {"message": "PDF URL updated successfully"}
|
|
|
|
|
|
@router.post("/create")
|
|
async def create_report(
|
|
report_data: dict,
|
|
current_session: Session = Depends(get_current_session),
|
|
report_service: InterviewReportService = Depends(InterviewReportService),
|
|
):
|
|
"""Создать новый отчёт интервью"""
|
|
if not current_session:
|
|
raise HTTPException(status_code=401, detail="No active session")
|
|
|
|
report = await report_service.create_report(**report_data)
|
|
if not report:
|
|
raise HTTPException(status_code=500, detail="Failed to create report")
|
|
|
|
return report
|