feat: 添加仪表板路由和响应数据脱敏功能 - 添加了仪表板模块路由并集成到主路由器中 - 实现了敏感数据响应脱敏配置和功能 - 增加了 Feishu 审批卡片操作处理功能 - 支持通过任务队列异步推送日常简报和项目周报 - 添加了风险事件生成的任务队列支持 - 在 smoke 测试中增加了相关功能验证 refactor: 格式化模型注册模块导入列表 - 将单行导入列表改为多行格式以提高可读性 ```
82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.core.database import get_db
|
|
from app.core.security import ApiPrincipal, require_api_key
|
|
from app.core.task_queue import enqueue_risk_event_generation
|
|
from app.modules.risk.constants import RiskGenerationResultKey
|
|
from app.modules.risk.service import RiskService
|
|
|
|
router = APIRouter(dependencies=[Depends(require_api_key)])
|
|
|
|
|
|
@router.get("/summary")
|
|
def risk_summary(
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return RiskService(db).summary()
|
|
|
|
|
|
@router.get("/overdue-tasks")
|
|
def overdue_tasks(
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return {RiskGenerationResultKey.ITEMS: RiskService(db).overdue_tasks()}
|
|
|
|
|
|
@router.get("/delayed-projects")
|
|
def delayed_projects(
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return {RiskGenerationResultKey.ITEMS: RiskService(db).delayed_projects()}
|
|
|
|
|
|
@router.get("/over-budget-projects")
|
|
def over_budget_projects(
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return {RiskGenerationResultKey.ITEMS: RiskService(db).over_budget_projects()}
|
|
|
|
|
|
@router.get("/funds")
|
|
def fund_risks(
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return {RiskGenerationResultKey.ITEMS: RiskService(db).fund_risks()}
|
|
|
|
|
|
@router.get("/suppliers")
|
|
def supplier_risks(
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return {RiskGenerationResultKey.ITEMS: RiskService(db).supplier_risks()}
|
|
|
|
|
|
@router.get("/events")
|
|
def risk_events(
|
|
limit: int = Query(default=100, ge=1, le=500),
|
|
status: str | None = None,
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return {
|
|
RiskGenerationResultKey.ITEMS: RiskService(db).list_events(
|
|
limit=limit,
|
|
status_filter=status,
|
|
)
|
|
}
|
|
|
|
|
|
@router.post("/events/generate")
|
|
def generate_risk_events(
|
|
db: Session = Depends(get_db),
|
|
principal: ApiPrincipal = Depends(require_api_key),
|
|
) -> dict:
|
|
return RiskService(db).generate_events(actor=principal.actor)
|
|
|
|
|
|
@router.post("/events/enqueue")
|
|
def enqueue_risk_events(
|
|
principal: ApiPrincipal = Depends(require_api_key),
|
|
) -> dict:
|
|
return enqueue_risk_event_generation(actor=principal.actor)
|