"""退出预测路由。""" from fastapi import APIRouter, Depends, Query 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.company import Company from app.models.exit_prediction import ExitPrediction from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.exit_predictor import predict_exit router = APIRouter(prefix="/exit-predictions", tags=["exit-predictions"]) @router.get("", response_model=ApiResponse[list]) async def list_exit_predictions( company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """获取退出预测列表。""" query = ( select(ExitPrediction) .join(Company, ExitPrediction.company_id == Company.id) .where(Company.tenant_id == user.tenant_id) ) if company_id: query = query.where(ExitPrediction.company_id == company_id) result = await db.execute(query.order_by(ExitPrediction.created_at.desc())) items = result.scalars().all() return success(data=[ { "id": str(i.id), "company_id": str(i.company_id), "exit_path": i.exit_path, "timing_window": i.timing_window, "expected_return": i.expected_return, "hold_return": i.hold_return, "confidence": i.confidence, "signals": i.signals, "recommendation": i.recommendation, } for i in items ]) @router.post("/predict", response_model=ApiResponse[dict]) async def predict(req: dict, user: User = Depends(get_current_user)): """AI 退出时机预测。""" result = await predict_exit(req.get("company_data", "")) return success(data=result)