function apiAbort(obj) { writeOutput(serializeJSON(obj)); abort; } // Read JSON body once data = {}; try { raw = toString(getHttpRequestData().content); if (len(trim(raw))) { data = deserializeJSON(raw); if (!isStruct(data)) data = {}; } } catch (any e) { data = {}; } httpHeaders = getHttpRequestData().headers; // Get BusinessID from: session > body > X-Business-ID header > URL bizId = 0; if (structKeyExists(request, "BusinessID") && isNumeric(request.BusinessID) && request.BusinessID GT 0) { bizId = int(request.BusinessID); } if (bizId LTE 0 && structKeyExists(data, "BusinessID") && isNumeric(data.BusinessID) && data.BusinessID GT 0) { bizId = int(data.BusinessID); } if (bizId LTE 0 && structKeyExists(httpHeaders, "X-Business-ID") && isNumeric(httpHeaders["X-Business-ID"]) && httpHeaders["X-Business-ID"] GT 0) { bizId = int(httpHeaders["X-Business-ID"]); } if (bizId LTE 0 && structKeyExists(url, "BusinessID") && isNumeric(url.BusinessID) && url.BusinessID GT 0) { bizId = int(url.BusinessID); } if (bizId LTE 0) { apiAbort({ OK=false, ERROR="no_business_selected" }); } // Default behavior: only active beacons unless onlyActive is explicitly false/0 onlyActive = true; if (structKeyExists(data, "onlyActive")) { if (isBoolean(data.onlyActive)) { onlyActive = data.onlyActive; } else if (isNumeric(data.onlyActive)) { onlyActive = (int(data.onlyActive) EQ 1); } else if (isSimpleValue(data.onlyActive)) { onlyActive = (lcase(trim(toString(data.onlyActive))) EQ "true"); } } SELECT BeaconID, BeaconBusinessID, BeaconName, BeaconUUID, BeaconIsActive FROM Beacons WHERE BeaconBusinessID = AND BeaconIsActive = 1 ORDER BY BeaconName, BeaconID #serializeJSON({ OK=true, ERROR="", BusinessID=bizId, COUNT=arrayLen(beacons), BEACONS=beacons })#