function apiAbort(obj){ writeOutput(serializeJSON(obj)); abort; } function readJsonBody(){ raw = toString(getHttpRequestData().content); if (isNull(raw) || len(trim(raw)) EQ 0){ apiAbort({OK=false,ERROR="missing_body"}); } try { parsed = deserializeJSON(raw); } catch(any e){ apiAbort({OK=false,ERROR="bad_json",MESSAGE="Invalid JSON body"}); } if (!isStruct(parsed)){ apiAbort({OK=false,ERROR="bad_json",MESSAGE="JSON must be an object"}); } return parsed; } /* ---------- AUTH CONTEXT ---------- */ if (!structKeyExists(request,"BusinessID") || !isNumeric(request.BusinessID) || request.BusinessID LTE 0){ apiAbort({OK=false,ERROR="no_business_selected"}); } /* ---------- INPUT ---------- */ data = readJsonBody(); if (!structKeyExists(data,"ServicePointID") || !isNumeric(data.ServicePointID) || int(data.ServicePointID) LTE 0){ apiAbort({OK=false,ERROR="missing_ServicePointID"}); } ServicePointID = int(data.ServicePointID); SELECT ID, BeaconID FROM ServicePoints WHERE ID = AND BusinessID = AND BeaconID IS NOT NULL LIMIT 1 #serializeJSON({ "OK"=false, "ERROR"="not_found", "ServicePointID"=ServicePointID, "BusinessID"=(request.BusinessID & "") })# UPDATE ServicePoints SET BeaconID = NULL, AssignedByUserID = NULL WHERE ID = AND BusinessID = #serializeJSON({ "OK"=true, "ERROR"="", "ACTION"="unassigned", "ServicePointID"=ServicePointID, "BeaconID"=removedBeaconID, "BusinessID"=(request.BusinessID & "") })#