52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
"""风控处置路由:预警列表 + 放行/拦截/冻结(仅风控专员)。"""
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from api.deps import require_risk_officer
|
|
from config.deps import get_db
|
|
from model.sys_user import SysUser
|
|
from service.risk import handle as risk_handle
|
|
from utils.response import success
|
|
|
|
router = APIRouter(prefix="/risk", tags=["风控"])
|
|
|
|
|
|
@router.get("/alert/list", summary="预警列表")
|
|
async def list_alerts(
|
|
status: str | None = None,
|
|
user: SysUser = Depends(require_risk_officer),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
alerts = await risk_handle.list_alerts(db, status)
|
|
return success([a.model_dump(mode="json") for a in alerts])
|
|
|
|
|
|
@router.post("/alert/{alert_id}/release", summary="放行")
|
|
async def release(
|
|
alert_id: int,
|
|
user: SysUser = Depends(require_risk_officer),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
result = await risk_handle.release(db, user, alert_id)
|
|
return success(result)
|
|
|
|
|
|
@router.post("/alert/{alert_id}/block", summary="拦截")
|
|
async def block(
|
|
alert_id: int,
|
|
user: SysUser = Depends(require_risk_officer),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
result = await risk_handle.block(db, user, alert_id)
|
|
return success(result)
|
|
|
|
|
|
@router.post("/alert/{alert_id}/freeze", summary="冻结")
|
|
async def freeze(
|
|
alert_id: int,
|
|
user: SysUser = Depends(require_risk_officer),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
result = await risk_handle.freeze(db, user, alert_id)
|
|
return success(result)
|