Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.

Commit a1a3efe

Browse files
committed
fix pagination
1 parent a5c08f3 commit a1a3efe

File tree

2 files changed

+41
-9
lines changed

2 files changed

+41
-9
lines changed

src/codegate/api/v1.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ async def get_workspace_messages(
489489
offset + fetched_prompts,
490490
batch_size,
491491
filter_by_ids,
492-
list([AlertSeverity.CRITICAL.value]), # TODO: Configurable severity
492+
list([AlertSeverity.CRITICAL.value]),
493493
filter_by_alert_trigger_types,
494494
)
495495

@@ -542,7 +542,10 @@ async def get_workspace_messages(
542542

543543
# Fetch total message count
544544
total_count = await dbreader.get_total_messages_count_by_workspace_id(
545-
ws.id, AlertSeverity.CRITICAL.value
545+
ws.id,
546+
filter_by_ids,
547+
list([AlertSeverity.CRITICAL.value]),
548+
filter_by_alert_trigger_types,
546549
)
547550

548551
return v1_models.PaginatedMessagesResponse(

src/codegate/db/connection.py

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -796,25 +796,54 @@ async def get_prompts(
796796
return rows
797797

798798
async def get_total_messages_count_by_workspace_id(
799-
self, workspace_id: str, trigger_category: Optional[str] = None
799+
self,
800+
workspace_id: str,
801+
filter_by_ids: Optional[List[str]] = None,
802+
filter_by_alert_trigger_categories: Optional[List[str]] = None,
803+
filter_by_alert_trigger_types: Optional[List[str]] = None,
800804
) -> int:
801805
"""
802806
Get total count of unique messages for a given workspace_id,
803807
considering trigger_category.
804808
"""
805-
sql = text(
806-
"""
809+
base_query = """
807810
SELECT COUNT(DISTINCT p.id)
808811
FROM prompts p
809812
LEFT JOIN alerts a ON p.id = a.prompt_id
810813
WHERE p.workspace_id = :workspace_id
814+
{filter_conditions}
811815
"""
812-
)
813816
conditions = {"workspace_id": workspace_id}
817+
filter_conditions = []
814818

815-
if trigger_category:
816-
sql = text(sql.text + " AND a.trigger_category = :trigger_category")
817-
conditions["trigger_category"] = trigger_category
819+
if filter_by_alert_trigger_categories:
820+
filter_conditions.append(
821+
"AND a.trigger_category IN :filter_by_alert_trigger_categories"
822+
)
823+
conditions["filter_by_alert_trigger_categories"] = filter_by_alert_trigger_categories
824+
825+
if filter_by_alert_trigger_types:
826+
filter_conditions.append(
827+
"AND EXISTS (SELECT 1 FROM alerts a2 WHERE "
828+
"a2.prompt_id = p.id AND a2.trigger_type IN :filter_by_alert_trigger_types)"
829+
)
830+
conditions["filter_by_alert_trigger_types"] = filter_by_alert_trigger_types
831+
832+
if filter_by_ids:
833+
filter_conditions.append("AND p.id IN :filter_by_ids")
834+
conditions["filter_by_ids"] = filter_by_ids
835+
836+
filter_clause = " ".join(filter_conditions)
837+
query = base_query.format(filter_conditions=filter_clause)
838+
sql = text(query)
839+
840+
# Bind optional params
841+
if filter_by_alert_trigger_categories:
842+
sql = sql.bindparams(bindparam("filter_by_alert_trigger_categories", expanding=True))
843+
if filter_by_alert_trigger_types:
844+
sql = sql.bindparams(bindparam("filter_by_alert_trigger_types", expanding=True))
845+
if filter_by_ids:
846+
sql = sql.bindparams(bindparam("filter_by_ids", expanding=True))
818847

819848
async with self._async_db_engine.begin() as conn:
820849
try:

0 commit comments

Comments
 (0)