feat(api): add device_type filter to device list endpoint
Operators can now filter the device list by device_type (routeros, snmp) via ?device_type=snmp query parameter. Enables the frontend type filter. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -91,6 +91,7 @@ async def list_devices(
|
||||
sort_order: str = Query("desc", description="asc or desc"),
|
||||
site_id: Optional[uuid.UUID] = Query(None, description="Filter by site"),
|
||||
sector_id: Optional[uuid.UUID] = Query(None, description="Filter by sector"),
|
||||
device_type: Optional[str] = Query(None, description="Filter by device type (routeros, snmp)"),
|
||||
current_user: CurrentUser = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
) -> DeviceListResponse:
|
||||
@@ -110,6 +111,7 @@ async def list_devices(
|
||||
sort_order=sort_order,
|
||||
site_id=site_id,
|
||||
sector_id=sector_id,
|
||||
device_type=device_type,
|
||||
)
|
||||
return DeviceListResponse(items=items, total=total, page=page, page_size=page_size)
|
||||
|
||||
|
||||
@@ -229,6 +229,7 @@ async def get_devices(
|
||||
sort_order: str = "desc",
|
||||
site_id: Optional[uuid.UUID] = None,
|
||||
sector_id: Optional[uuid.UUID] = None,
|
||||
device_type: Optional[str] = None,
|
||||
) -> tuple[list[DeviceResponse], int]:
|
||||
"""
|
||||
Return a paginated list of devices with optional filtering and sorting.
|
||||
@@ -273,6 +274,9 @@ async def get_devices(
|
||||
if sector_id:
|
||||
base_q = base_q.where(Device.sector_id == sector_id)
|
||||
|
||||
if device_type:
|
||||
base_q = base_q.where(Device.device_type == device_type)
|
||||
|
||||
# Count total before pagination
|
||||
count_q = select(func.count()).select_from(base_q.subquery())
|
||||
total_result = await db.execute(count_q)
|
||||
|
||||
Reference in New Issue
Block a user