"""弱信号路由:列表 + 关联结果查询。""" 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.company import Company from app.models.user import User from app.models.weak_signal import WeakSignal from app.schemas.common import ApiResponse, success from app.services.signal_correlator import correlate_signals router = APIRouter(prefix="/weak-signals", tags=["weak-signals"]) @router.get("", response_model=ApiResponse[list]) async def list_weak_signals( company_id: str | None = Query(default=None), signal_type: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """获取弱信号列表。""" query = ( select(WeakSignal) .join(Company, WeakSignal.company_id == Company.id) .where(Company.tenant_id == user.tenant_id) ) if company_id: query = query.where(WeakSignal.company_id == company_id) if signal_type: query = query.where(WeakSignal.signal_type == signal_type) result = await db.execute(query.order_by(WeakSignal.detected_at.desc())) items = result.scalars().all() return success(data=[ { "id": str(i.id), "company_id": str(i.company_id), "signal_type": i.signal_type, "source": i.source, "content": i.content, "confidence": i.confidence, "correlation_id": i.correlation_id, "correlation_result": i.correlation_result, "risk_probability": i.risk_probability, "status": i.status, "detected_at": i.detected_at.isoformat(), } for i in items ]) @router.post("/correlate", response_model=ApiResponse[list]) async def correlate_weak_signals( req: dict, db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """对弱信号进行关联分析。""" signals = req.get("signals", []) results = await correlate_signals(signals) return success(data=results)