"""影响分析 API。""" from fastapi import APIRouter, Depends, HTTPException from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.security import get_current_user from app.models.user import User from app.models.instance import Instance from app.schemas.impact import ImpactAnalysisRequest, ImpactAnalysisResponse from app.services.impact_analyzer import ImpactAnalyzer router = APIRouter(prefix="/impact", tags=["影响分析"]) @router.post("/analyze", response_model=ImpactAnalysisResponse) async def analyze_impact( data: ImpactAnalysisRequest, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ): """分析 SQL 执行影响。 预估影响行数、执行时间、风险等级。 """ result = await db.execute(select(Instance).where(Instance.id == data.instance_id)) instance = result.scalar_one_or_none() if not instance: raise HTTPException(status_code=404, detail="数据源不存在") analyzer = ImpactAnalyzer() analysis = await analyzer.analyze(instance, data.database, data.sql_content) return analysis.to_dict()