fix(awooop): record grouped alert events
This commit is contained in:
@@ -18,6 +18,7 @@ from sqlalchemy import func, select
|
||||
|
||||
from src.db.awooop_models import (
|
||||
AwoooPContractRevision,
|
||||
AwoooPConversationEvent,
|
||||
AwoooPProject,
|
||||
AwoooPRunState,
|
||||
)
|
||||
@@ -31,6 +32,7 @@ logger = structlog.get_logger(__name__)
|
||||
_MAX_CONTRACTS = 200
|
||||
_DEFAULT_PER_PAGE = 50
|
||||
_MAX_PER_PAGE = 200
|
||||
_MAX_EVENTS = 100
|
||||
|
||||
# =============================================================================
|
||||
# Tenants
|
||||
@@ -147,6 +149,54 @@ async def list_runs(
|
||||
return {"runs": runs, "total": total, "page": page, "per_page": per_page}
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Channel Events
|
||||
# =============================================================================
|
||||
|
||||
async def list_recent_channel_events(
|
||||
*,
|
||||
project_id: str | None,
|
||||
channel_type: str | None,
|
||||
provider_prefix: str | None,
|
||||
limit: int,
|
||||
) -> dict[str, Any]:
|
||||
"""列出最近 channel events,供 Operator Console 顯示收斂/鏡像脈絡。"""
|
||||
safe_limit = max(1, min(limit, _MAX_EVENTS))
|
||||
|
||||
async with get_db_context("awoooi") as db:
|
||||
stmt = select(AwoooPConversationEvent).order_by(
|
||||
AwoooPConversationEvent.received_at.desc()
|
||||
)
|
||||
if project_id is not None:
|
||||
stmt = stmt.where(AwoooPConversationEvent.project_id == project_id)
|
||||
if channel_type is not None:
|
||||
stmt = stmt.where(AwoooPConversationEvent.channel_type == channel_type)
|
||||
if provider_prefix is not None:
|
||||
stmt = stmt.where(
|
||||
AwoooPConversationEvent.provider_event_id.like(
|
||||
f"{provider_prefix}%"
|
||||
)
|
||||
)
|
||||
|
||||
result = await db.execute(stmt.limit(safe_limit))
|
||||
rows = list(result.scalars().all())
|
||||
|
||||
events = [
|
||||
{
|
||||
"event_id": r.event_id,
|
||||
"project_id": r.project_id,
|
||||
"channel_type": r.channel_type,
|
||||
"provider_event_id": r.provider_event_id,
|
||||
"channel_chat_id": r.channel_chat_id,
|
||||
"content_preview": r.content_preview,
|
||||
"is_duplicate": r.is_duplicate,
|
||||
"received_at": r.received_at,
|
||||
}
|
||||
for r in rows
|
||||
]
|
||||
return {"events": events, "total": len(events), "limit": safe_limit}
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Approvals
|
||||
# =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user