@@ -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