// api/records-list.prg — Format records list (summary or full) // ctx: // session_id, total, fields ("summary"|"full") // rows (JSON array of record rows) FUNCTION Main() LOCAL aRows, aOut, hRow, hOut, cFields, aChannels, hCh, aChOut aRows := hb_jsonDecode(ctx_get("rows", "[]")) cFields := ctx_get("fields", "summary") IF ! HB_ISARRAY(aRows) ; aRows := {} ; ENDIF aOut := {} FOR EACH hRow IN aRows hOut := { ; "rowIndex" => fn_HGet(hRow, "row_index"), ; "timestamp" => fn_HGet(hRow, "timestamp"), ; "commandType" => fn_HGet(hRow, "command_type"), ; "raaStatus" => fn_HGet(hRow, "raa_status") ; } IF cFields == "full" hOut["sensor"] := fn_HGet(hRow, "sensor") hOut["channels"] := fn_HGet(hRow, "channels") ELSE // Summary: keep only ch, peak, peakIdx aChannels := fn_HGet(hRow, "channels") aChOut := {} IF HB_ISARRAY(aChannels) FOR EACH hCh IN aChannels IF HB_ISHASH(hCh) AAdd(aChOut, { ; "ch" => fn_HGet(hCh, "ch"), ; "peak" => fn_HGet(hCh, "peak"), ; "peakIdx" => fn_HGet(hCh, "peakIdx") ; }) ENDIF NEXT ENDIF hOut["channels"] := aChOut ENDIF AAdd(aOut, hOut) NEXT AP_JSONRESPONSE({ ; "sessionId" => ctx_get("session_id", ""), ; "total" => Val(ctx_get("total", "0")), ; "records" => aOut ; }) RETURN NIL FUNCTION records_list_fn_hget(h, k) IF HB_ISHASH(h) .AND. hb_HHasKey(h, k) ; RETURN h[k] ; ENDIF RETURN ""