diff --git a/src/meshcore_hub/web/routes/messages.py b/src/meshcore_hub/web/routes/messages.py index 1a11d2e..9f5e1e9 100644 --- a/src/meshcore_hub/web/routes/messages.py +++ b/src/meshcore_hub/web/routes/messages.py @@ -15,7 +15,7 @@ router = APIRouter() async def messages_list( request: Request, message_type: str | None = Query(None, description="Filter by message type"), - channel_idx: int | None = Query(None, description="Filter by channel"), + channel_idx: str | None = Query(None, description="Filter by channel"), search: str | None = Query(None, description="Search in message text"), page: int = Query(1, ge=1, description="Page number"), limit: int = Query(50, ge=1, le=100, description="Items per page"), @@ -28,12 +28,20 @@ async def messages_list( # Calculate offset offset = (page - 1) * limit + # Parse channel_idx, treating empty string as None + channel_idx_int: int | None = None + if channel_idx and channel_idx.strip(): + try: + channel_idx_int = int(channel_idx) + except ValueError: + logger.warning(f"Invalid channel_idx value: {channel_idx}") + # Build query params params: dict[str, int | str] = {"limit": limit, "offset": offset} if message_type: params["message_type"] = message_type - if channel_idx is not None: - params["channel_idx"] = channel_idx + if channel_idx_int is not None: + params["channel_idx"] = channel_idx_int # Fetch messages from API messages = [] @@ -62,7 +70,7 @@ async def messages_list( "limit": limit, "total_pages": total_pages, "message_type": message_type or "", - "channel_idx": channel_idx, + "channel_idx": channel_idx_int, "search": search or "", } )