diff --git a/backend/app/routers/devices.py b/backend/app/routers/devices.py index 741a417..0db258d 100644 --- a/backend/app/routers/devices.py +++ b/backend/app/routers/devices.py @@ -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) diff --git a/backend/app/services/device.py b/backend/app/services/device.py index 067185a..5053c40 100644 --- a/backend/app/services/device.py +++ b/backend/app/services/device.py @@ -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)