"""决策前哨路由:CRUD + 场景分析查询。""" from fastapi import APIRouter, Depends, HTTPException, 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.company import Company from app.models.decision_sentinel import DecisionSentinel from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.decision_sentinel_agent import analyze_scenarios, identify_decision_points router = APIRouter(prefix="/decision-sentinels", tags=["decision-sentinels"]) @router.get("", response_model=ApiResponse[list]) async def list_sentinels( company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """获取决策前哨列表。""" query = ( select(DecisionSentinel) .join(Company, DecisionSentinel.company_id == Company.id) .where(Company.tenant_id == user.tenant_id) ) if company_id: query = query.where(DecisionSentinel.company_id == company_id) result = await db.execute(query.order_by(DecisionSentinel.identified_at.desc())) items = result.scalars().all() return success(data=[ { "id": str(i.id), "company_id": str(i.company_id), "decision_type": i.decision_type, "title": i.title, "description": i.description, "signals": i.signals, "scenarios": i.scenarios, "status": i.status, "identified_at": i.identified_at.isoformat(), } for i in items ]) @router.post("/identify", response_model=ApiResponse[list]) async def identify_sentinels( req: dict, user: User = Depends(get_current_user), ): """AI 识别决策岔路口。""" points = await identify_decision_points(req.get("company_context", "")) return success(data=points) @router.post("/{sentinel_id}/analyze", response_model=ApiResponse[dict]) async def analyze_sentinel_scenarios( sentinel_id: str, req: dict, user: User = Depends(get_current_user), ): """AI 生成场景分析。""" scenarios = await analyze_scenarios(req.get("decision", {})) return success(data=scenarios)