// api/sessions-list.prg — Format session list response // // ctx inputs: // rows (JSON string) — array of pg rows from server.js // total (string number) — total count // device_name (string) — current device name // // PRG handles formatting + Harbour float computation if needed. // Copyright (c) 2026 Charles KWON OhJun FUNCTION Main() LOCAL aRows, hRow, aOut, hOut, nTotal, cDeviceName, hSession aRows := hb_jsonDecode(ctx_get("rows", "[]")) nTotal := Val(ctx_get("total", "0")) cDeviceName := ctx_get("device_name", "") IF ! HB_ISARRAY(aRows) aRows := {} ENDIF aOut := {} FOR EACH hRow IN aRows hSession := { ; "sessionId" => fn_HGet(hRow, "session_id"), ; "sessionName" => fn_HGet(hRow, "session_name"), ; "deviceName" => cDeviceName, ; "startTime" => fn_HGet(hRow, "start_time"), ; "endTime" => fn_HGet(hRow, "end_time"), ; "recordCount" => fn_HGet(hRow, "record_count"), ; "params" => fn_HGet(hRow, "params"), ; "note" => fn_HGet(hRow, "note"), ; "status" => fn_HGet(hRow, "status") ; } AAdd(aOut, hSession) NEXT hOut := { "total" => nTotal, "sessions" => aOut } AP_JSONRESPONSE(hOut) RETURN NIL // Safe hash get (returns "" for missing key) STATIC FUNCTION fn_HGet(hHash, cKey) IF HB_ISHASH(hHash) .AND. hb_HHasKey(hHash, cKey) RETURN hHash[ cKey ] ENDIF RETURN ""