"""人才路由。""" from fastapi import APIRouter, Depends, Query, status from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.dependencies import get_current_user from app.models.talent import TalentProfile, TeamMember from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.talent_agent import predict_talent_flow, recommend_talent router = APIRouter(prefix="/talents", tags=["talents"]) @router.get("", response_model=ApiResponse[list]) async def list_talents(db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取人才池列表。""" result = await db.execute( select(TalentProfile).where(TalentProfile.tenant_id == user.tenant_id) ) items = result.scalars().all() return success(data=[ { "id": str(i.id), "name": i.name, "current_role": i.current_role, "current_company": i.current_company, "skills": i.skills, "performance_rating": i.performance_rating, "potential_rating": i.potential_rating, "nine_box": i.nine_box, "flow_prediction": i.flow_prediction, "status": i.status, } for i in items ]) @router.post("/predict-flow", response_model=ApiResponse[dict]) async def predict_flow(req: dict, user: User = Depends(get_current_user)): """AI 预测人才流动。""" result = await predict_talent_flow(req.get("talent_data", "")) return success(data=result) @router.post("/recommend", response_model=ApiResponse[list]) async def recommend(req: dict, user: User = Depends(get_current_user)): """AI 推荐人才。""" results = await recommend_talent(req.get("company_need", ""), req.get("talent_pool", "")) return success(data=results) @router.get("/team-members", response_model=ApiResponse[list]) async def list_team_members(company_id: str = Query(...), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取企业团队成员列表。""" result = await db.execute( select(TeamMember).where(TeamMember.company_id == company_id) ) items = result.scalars().all() return success(data=[ { "id": str(i.id), "name": i.name, "role": i.role, "is_key_person": i.is_key_person, "stability_score": i.stability_score, "joined_at": i.joined_at.isoformat() if i.joined_at else None, } for i in items ])