Fix list filters + align API params to the concatenated convention

Backends read snake_case filter params (type_id, vendor_id, location_id,
businessunit_id, status_id, os_id) while the frontend sends the concatenated
form (typeid, vendorid, ...), so the network/notifications/printers list
filters silently did nothing. Backends now read the concatenated name with a
snake_case fallback (no breakage), matching the locked naming convention.

Verified: network type filter now narrows results (45 -> 25 for Access Points).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-06-26 12:36:47 -04:00
parent 820d3650ff
commit fc93506af3
6 changed files with 1865 additions and 1865 deletions

View File

@@ -165,19 +165,19 @@ def list_computers():
) )
# Computer type filter # Computer type filter
if type_id := request.args.get('type_id'): if type_id := request.args.get('typeid', request.args.get('type_id')):
query = query.filter(Computer.computertypeid == int(type_id)) query = query.filter(Computer.computertypeid == int(type_id))
# OS filter # OS filter
if os_id := request.args.get('os_id'): if os_id := request.args.get('osid', request.args.get('os_id')):
query = query.filter(Computer.osid == int(os_id)) query = query.filter(Computer.osid == int(os_id))
# Location filter # Location filter
if location_id := request.args.get('location_id'): if location_id := request.args.get('locationid', request.args.get('location_id')):
query = query.filter(Asset.locationid == int(location_id)) query = query.filter(Asset.locationid == int(location_id))
# Business unit filter # Business unit filter
if bu_id := request.args.get('businessunit_id'): if bu_id := request.args.get('businessunitid', request.args.get('businessunit_id')):
query = query.filter(Asset.businessunitid == int(bu_id)) query = query.filter(Asset.businessunitid == int(bu_id))
# Shopfloor filter # Shopfloor filter

View File

@@ -160,19 +160,19 @@ def list_equipment():
) )
# Equipment type filter # Equipment type filter
if type_id := request.args.get('type_id'): if type_id := request.args.get('typeid', request.args.get('type_id')):
query = query.filter(Equipment.equipmenttypeid == int(type_id)) query = query.filter(Equipment.equipmenttypeid == int(type_id))
# Vendor filter # Vendor filter
if vendor_id := request.args.get('vendor_id'): if vendor_id := request.args.get('vendorid', request.args.get('vendor_id')):
query = query.filter(Equipment.vendorid == int(vendor_id)) query = query.filter(Equipment.vendorid == int(vendor_id))
# Location filter # Location filter
if location_id := request.args.get('location_id'): if location_id := request.args.get('locationid', request.args.get('location_id')):
query = query.filter(Asset.locationid == int(location_id)) query = query.filter(Asset.locationid == int(location_id))
# Business unit filter # Business unit filter
if bu_id := request.args.get('businessunit_id'): if bu_id := request.args.get('businessunitid', request.args.get('businessunit_id')):
query = query.filter(Asset.businessunitid == int(bu_id)) query = query.filter(Asset.businessunitid == int(bu_id))
# Sorting # Sorting

View File

@@ -163,19 +163,19 @@ def list_network_devices():
) )
# Type filter # Type filter
if type_id := request.args.get('type_id'): if type_id := request.args.get('typeid', request.args.get('type_id')):
query = query.filter(NetworkDevice.networkdevicetypeid == int(type_id)) query = query.filter(NetworkDevice.networkdevicetypeid == int(type_id))
# Vendor filter # Vendor filter
if vendor_id := request.args.get('vendor_id'): if vendor_id := request.args.get('vendorid', request.args.get('vendor_id')):
query = query.filter(NetworkDevice.vendorid == int(vendor_id)) query = query.filter(NetworkDevice.vendorid == int(vendor_id))
# Location filter # Location filter
if location_id := request.args.get('location_id'): if location_id := request.args.get('locationid', request.args.get('location_id')):
query = query.filter(Asset.locationid == int(location_id)) query = query.filter(Asset.locationid == int(location_id))
# Business unit filter # Business unit filter
if bu_id := request.args.get('businessunit_id'): if bu_id := request.args.get('businessunitid', request.args.get('businessunit_id')):
query = query.filter(Asset.businessunitid == int(bu_id)) query = query.filter(Asset.businessunitid == int(bu_id))
# PoE filter # PoE filter

View File

@@ -94,7 +94,7 @@ def list_notifications():
query = query.filter(Notification.isactive == True) query = query.filter(Notification.isactive == True)
# Type filter # Type filter
if type_id := request.args.get('type_id'): if type_id := request.args.get('typeid', request.args.get('type_id')):
query = query.filter(Notification.notificationtypeid == int(type_id)) query = query.filter(Notification.notificationtypeid == int(type_id))
# Current filter (active based on dates) # Current filter (active based on dates)

View File

@@ -145,15 +145,15 @@ def list_printers():
query = query.filter(Printer.printertypeid == int(typeid)) query = query.filter(Printer.printertypeid == int(typeid))
# Vendor filter # Vendor filter
if vendor_id := request.args.get('vendor_id'): if vendor_id := request.args.get('vendorid', request.args.get('vendor_id')):
query = query.filter(Printer.vendorid == int(vendor_id)) query = query.filter(Printer.vendorid == int(vendor_id))
# Location filter # Location filter
if location_id := request.args.get('location_id'): if location_id := request.args.get('locationid', request.args.get('location_id')):
query = query.filter(Asset.locationid == int(location_id)) query = query.filter(Asset.locationid == int(location_id))
# Business unit filter # Business unit filter
if bu_id := request.args.get('businessunit_id'): if bu_id := request.args.get('businessunitid', request.args.get('businessunit_id')):
query = query.filter(Asset.businessunitid == int(bu_id)) query = query.filter(Asset.businessunitid == int(bu_id))
# Sorting # Sorting
@@ -792,7 +792,7 @@ def list_supply_models():
if search := request.args.get('search'): if search := request.args.get('search'):
query = query.filter(Model.modelnumber.ilike(f'%{search}%')) query = query.filter(Model.modelnumber.ilike(f'%{search}%'))
if vendor_id := request.args.get('vendor_id'): if vendor_id := request.args.get('vendorid', request.args.get('vendor_id')):
query = query.filter(Model.vendorid == int(vendor_id)) query = query.filter(Model.vendorid == int(vendor_id))
if request.args.get('withsupplies', '').lower() == 'true': if request.args.get('withsupplies', '').lower() == 'true':
query = query.having(supplycount > 0) query = query.having(supplycount > 0)

View File

@@ -293,19 +293,19 @@ def list_assets():
query = query.join(AssetType).filter(AssetType.assettype == type_name) query = query.join(AssetType).filter(AssetType.assettype == type_name)
# Type filter by ID # Type filter by ID
if type_id := request.args.get('type_id'): if type_id := request.args.get('typeid', request.args.get('type_id')):
query = query.filter(Asset.assettypeid == int(type_id)) query = query.filter(Asset.assettypeid == int(type_id))
# Status filter # Status filter
if status_id := request.args.get('status_id'): if status_id := request.args.get('statusid', request.args.get('status_id')):
query = query.filter(Asset.statusid == int(status_id)) query = query.filter(Asset.statusid == int(status_id))
# Location filter # Location filter
if location_id := request.args.get('location_id'): if location_id := request.args.get('locationid', request.args.get('location_id')):
query = query.filter(Asset.locationid == int(location_id)) query = query.filter(Asset.locationid == int(location_id))
# Business unit filter # Business unit filter
if bu_id := request.args.get('businessunit_id'): if bu_id := request.args.get('businessunitid', request.args.get('businessunit_id')):
query = query.filter(Asset.businessunitid == int(bu_id)) query = query.filter(Asset.businessunitid == int(bu_id))
# Sorting # Sorting