/* PUBLIC MVP endpoint Returns Businesses list with STRICT casing: - Businesses - BusinessID - BusinessName Lucee-safe JSON output (NO encodeForJSON) */ function jsonString(val) { // serializeJSON("abc") -> "\"abc\"" // we strip the surrounding quotes var s = serializeJSON(toString(val)); return mid(s, 2, len(s) - 2); } function apiAbort(obj) { writeOutput('{'); writeOutput('"OK":false'); if (structKeyExists(obj, "ERROR")) { writeOutput(',"ERROR":"' & jsonString(obj.ERROR) & '"'); } if (structKeyExists(obj, "DETAIL")) { writeOutput(',"DETAIL":"' & jsonString(obj.DETAIL) & '"'); } writeOutput('}'); abort; } /* ---- datasource resolution (unchanged) ---- */ dsn = ""; if (structKeyExists(application, "datasource")) { dsn = application.datasource; } else if (structKeyExists(application, "dsn")) { dsn = application.dsn; } if (!len(dsn)) { apiAbort({ ERROR = "missing_datasource", DETAIL = "No datasource configured" }); } /* ---- query ---- */ q = queryExecute( " SELECT BusinessID, BusinessName FROM Businesses ORDER BY BusinessName ", [], { datasource = dsn } ); /* ---- output ---- */ writeOutput('{'); writeOutput('"OK":true'); writeOutput(',"COUNT":' & q.recordCount); writeOutput(',"Businesses":['); for (i = 1; i LTE q.recordCount; i = i + 1) { if (i GT 1) writeOutput(','); writeOutput('{'); writeOutput('"BusinessID":' & q.BusinessID[i]); writeOutput(',"BusinessName":"' & jsonString(q.BusinessName[i]) & '"'); writeOutput('}'); } writeOutput(']}');