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 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 b.ID, b.Name, b.BeaconShardID, b.BeaconMajor, bs.UUID AS ShardUUID FROM Businesses b LEFT JOIN BeaconShards bs ON bs.ID = b.BeaconShardID WHERE b.ID = LIMIT 1 #serializeJSON({ OK=false, ERROR="business_not_found" })# SELECT sp.ID AS ServicePointID, sp.Name, sp.BeaconMinor, sp.IsActive, sp.TypeID FROM ServicePoints sp WHERE sp.BusinessID = AND sp.BeaconMinor IS NOT NULL AND sp.IsActive = 1 ORDER BY sp.BeaconMinor, sp.Name try{logPerf(0);}catch(any e){} #serializeJSON({ OK = true, ERROR = "", BusinessID = bizId, BusinessName = qBiz.Name, COUNT = arrayLen(beacons), BEACONS = beacons, HAS_SHARD = hasShard, SHARD_INFO = shardInfo })#