feat(search): add structured filters to AI session list endpoint and frontend
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ CRUD and interaction endpoints for AI-powered troubleshooting sessions:
|
||||
POST /ai-sessions/{id}/rate — Submit post-session rating
|
||||
"""
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from typing import Annotated, Optional
|
||||
from uuid import UUID
|
||||
|
||||
@@ -464,6 +465,13 @@ async def list_sessions(
|
||||
session_status: Optional[str] = Query(None, alias="status"),
|
||||
skip: int = Query(0, ge=0),
|
||||
limit: int = Query(20, ge=1, le=100),
|
||||
problem_domain: Optional[str] = Query(None),
|
||||
matched_flow_id: Optional[UUID] = Query(None),
|
||||
confidence_tier: Optional[str] = Query(None, pattern="^(guided|exploring|discovery)$"),
|
||||
ticket_id: Optional[str] = Query(None),
|
||||
date_from: Optional[datetime] = Query(None),
|
||||
date_to: Optional[datetime] = Query(None),
|
||||
q: Optional[str] = Query(None, min_length=2, max_length=200),
|
||||
):
|
||||
"""List the current user's AI sessions (owned or picked up)."""
|
||||
user_id_str = str(current_user.id)
|
||||
@@ -482,6 +490,19 @@ async def list_sessions(
|
||||
|
||||
if session_status:
|
||||
query = query.where(AISession.status == session_status)
|
||||
if problem_domain:
|
||||
query = query.where(AISession.problem_domain == problem_domain)
|
||||
if matched_flow_id:
|
||||
query = query.where(AISession.matched_flow_id == matched_flow_id)
|
||||
if confidence_tier:
|
||||
query = query.where(AISession.confidence_tier == confidence_tier)
|
||||
if ticket_id:
|
||||
query = query.where(AISession.ticket_id == ticket_id)
|
||||
if date_from:
|
||||
query = query.where(AISession.created_at >= date_from)
|
||||
if date_to:
|
||||
query = query.where(AISession.created_at <= date_to)
|
||||
# TODO: Full-text search via q param — see Task 7
|
||||
|
||||
result = await db.execute(query)
|
||||
sessions = result.scalars().all()
|
||||
|
||||
Reference in New Issue
Block a user