"""Personnel recommendation endpoint.""" from __future__ import annotations from typing import Optional from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from ....core.database import get_db from ....dependencies import get_current_user, get_tenant_id from ....models import User from ....schemas.skill import ( PersonnelRecommendationItem, PersonnelRecommendationResponse, ) from ....services import skill as skill_service router = APIRouter() @router.get("/recommend", response_model=PersonnelRecommendationResponse) async def recommend_personnel( skills: str = Query(..., description="所需技能,逗号分隔,如: python,react,fastapi"), task_description: Optional[str] = Query(None), task_id: Optional[str] = Query(None), limit: int = Query(5, ge=1, le=20), tenant_id: int = Depends(get_tenant_id), current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): _ = current_user required_skills = [skill.strip() for skill in skills.split(",") if skill.strip()] result = await skill_service.recommend_personnel( db, tenant_id=tenant_id, required_skills=required_skills, task_description=task_description, task_id=task_id, limit=limit, ) return PersonnelRecommendationResponse( task_id=result.get("task_id"), task_description=result.get("task_description"), required_skills=result.get("required_skills", []), recommendations=[ PersonnelRecommendationItem(**item) for item in result.get("recommendations", []) ], total_count=result.get("total_count", 0), )