function apiAbort(payload) { writeOutput(serializeJSON(payload)); abort; } function readJsonBody() { raw = toString(getHttpRequestData().content); if (isNull(raw) || len(trim(raw)) EQ 0) return {}; try { parsed = deserializeJSON(raw); } catch(any e) { apiAbort({ OK=false, ERROR="bad_json", MESSAGE="Invalid JSON body" }); } if (!isStruct(parsed)) return {}; return parsed; } // Support GET param or POST body parentBusinessId = 0; if (structKeyExists(url, "BusinessID") && isNumeric(url.BusinessID)) { parentBusinessId = int(url.BusinessID); } else { data = readJsonBody(); if (structKeyExists(data, "BusinessID") && isNumeric(data.BusinessID)) { parentBusinessId = int(data.BusinessID); } } if (parentBusinessId LTE 0) { apiAbort({ OK=false, ERROR="missing_business_id", MESSAGE="BusinessID is required" }); } try { q = queryExecute( " SELECT BusinessID, BusinessName FROM Businesses WHERE BusinessParentBusinessID = :parentId ORDER BY BusinessName ", { parentId = { value = parentBusinessId, cfsqltype = "cf_sql_integer" } }, { datasource = "payfrit" } ); rows = []; for (i = 1; i <= q.recordCount; i++) { arrayAppend(rows, { "BusinessID": q.BusinessID[i], "BusinessName": q.BusinessName[i] }); } writeOutput(serializeJSON({ "OK": true, "ERROR": "", "BUSINESSES": rows })); abort; } catch (any e) { apiAbort({ "OK": false, "ERROR": "server_error", "DETAIL": e.message }); }