feat(governance): link work items to event history
This commit is contained in:
@@ -54,6 +54,7 @@ router = APIRouter()
|
||||
|
||||
@router.get("/ai/governance/events", response_model=GovernanceEventsResponse)
|
||||
async def get_governance_events(
|
||||
event_id: Annotated[list[str] | None, Query(alias="event_id")] = None,
|
||||
event_type: Annotated[list[str] | None, Query(alias="event_type")] = None,
|
||||
from_: Annotated[datetime | None, Query(alias="from")] = None,
|
||||
to: Annotated[datetime | None, Query(alias="to")] = None,
|
||||
@@ -66,6 +67,7 @@ async def get_governance_events(
|
||||
查詢 AI 治理事件列表(分頁)。
|
||||
|
||||
- event_type: 多值過濾(可重複傳)
|
||||
- event_id: 多值精準過濾(可重複傳),供 Telegram 詳情 / 歷史與 Work Items 錨點回看
|
||||
- from / to: ISO 8601 時間範圍(URL 傳 from 參數)
|
||||
- status: resolved / unresolved
|
||||
- severity: critical / warning / info(由 event_type 映射決定)
|
||||
@@ -74,6 +76,7 @@ async def get_governance_events(
|
||||
"""
|
||||
logger.debug(
|
||||
"governance_events_request",
|
||||
event_ids=event_id,
|
||||
event_types=event_type,
|
||||
from_=from_,
|
||||
to=to,
|
||||
@@ -83,6 +86,7 @@ async def get_governance_events(
|
||||
size=size,
|
||||
)
|
||||
return await query_governance_events(
|
||||
event_ids=event_id,
|
||||
event_types=event_type,
|
||||
from_dt=from_,
|
||||
to_dt=to,
|
||||
|
||||
@@ -195,6 +195,7 @@ async def _load_dispatch_ids_for_events(event_ids: list[str]) -> dict[str, list[
|
||||
|
||||
async def query_governance_events(
|
||||
*,
|
||||
event_ids: list[str] | None = None,
|
||||
event_types: list[str] | None = None,
|
||||
from_dt: datetime | None = None,
|
||||
to_dt: datetime | None = None,
|
||||
@@ -212,6 +213,14 @@ async def query_governance_events(
|
||||
async with get_db_context() as db:
|
||||
stmt = select(AiGovernanceEvent)
|
||||
|
||||
normalized_event_ids = [
|
||||
event_id.strip()
|
||||
for event_id in (event_ids or [])
|
||||
if isinstance(event_id, str) and event_id.strip()
|
||||
]
|
||||
if normalized_event_ids:
|
||||
stmt = stmt.where(AiGovernanceEvent.id.in_(normalized_event_ids))
|
||||
|
||||
if event_types:
|
||||
stmt = stmt.where(AiGovernanceEvent.event_type.in_(event_types))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user