ai-hackaton-backend/app/routers/admin_router.py

119 lines
3.9 KiB
Python

from fastapi import APIRouter, Depends, HTTPException
from app.services.admin_service import AdminService
from app.services.agent_manager import agent_manager
router = APIRouter(prefix="/admin", tags=["Admin"])
@router.get("/interview-processes")
async def list_active_interview_processes(
admin_service: AdminService = Depends(AdminService),
) -> dict:
"""Список всех активных AI процессов интервью"""
return await admin_service.get_active_interview_processes()
@router.post("/interview-processes/{session_id}/stop")
async def stop_interview_process(
session_id: int, admin_service: AdminService = Depends(AdminService)
) -> dict:
"""Остановить AI процесс для конкретного интервью"""
result = await admin_service.stop_interview_process(session_id)
if not result["success"]:
raise HTTPException(status_code=404, detail=result["message"])
return result
@router.post("/interview-processes/cleanup")
async def cleanup_dead_processes(
admin_service: AdminService = Depends(AdminService),
) -> dict:
"""Очистка мертвых процессов"""
return await admin_service.cleanup_dead_processes()
@router.get("/system-stats")
async def get_system_stats(admin_service: AdminService = Depends(AdminService)) -> dict:
"""Общая статистика системы"""
result = await admin_service.get_system_stats()
if "error" in result:
raise HTTPException(status_code=500, detail=result["error"])
return result
@router.get("/agent/status")
async def get_agent_status() -> dict:
"""Статус AI агента"""
return {"agent": agent_manager.get_status()}
@router.post("/agent/start")
async def start_agent() -> dict:
"""Запуск AI агента"""
success = await agent_manager.start_agent()
if success:
return {"success": True, "message": "AI Agent started successfully"}
else:
raise HTTPException(status_code=500, detail="Failed to start AI Agent")
@router.post("/agent/stop")
async def stop_agent() -> dict:
"""Остановка AI агента"""
success = await agent_manager.stop_agent()
if success:
return {"success": True, "message": "AI Agent stopped successfully"}
else:
raise HTTPException(status_code=500, detail="Failed to stop AI Agent")
@router.post("/agent/restart")
async def restart_agent() -> dict:
"""Перезапуск AI агента"""
# Сначала останавливаем
await agent_manager.stop_agent()
# Затем запускаем
success = await agent_manager.start_agent()
if success:
return {"success": True, "message": "AI Agent restarted successfully"}
else:
raise HTTPException(status_code=500, detail="Failed to restart AI Agent")
@router.get("/analytics/dashboard")
async def get_analytics_dashboard(
admin_service: AdminService = Depends(AdminService),
) -> dict:
"""Основная аналитическая панель"""
return await admin_service.get_analytics_dashboard()
@router.get("/analytics/candidates/{vacancy_id}")
async def get_vacancy_analytics(
vacancy_id: int, admin_service: AdminService = Depends(AdminService)
) -> dict:
"""Аналитика кандидатов по конкретной вакансии"""
return await admin_service.get_vacancy_analytics(vacancy_id)
@router.post("/analytics/generate-reports/{vacancy_id}")
async def generate_reports_for_vacancy(
vacancy_id: int, admin_service: AdminService = Depends(AdminService)
) -> dict:
"""Запустить генерацию отчетов для всех кандидатов вакансии"""
result = await admin_service.generate_reports_for_vacancy(vacancy_id)
if "error" in result:
raise HTTPException(status_code=404, detail=result["error"])
return result