Files
fivenode_go/app/api/session-detail.prg
Charles KWON OhJun ed956a1504 revert: drop AP_RPUTS single-arg patch and fn_HGet renames
Both workarounds existed because Five was missing two features that
just landed upstream:

  Five 7629f95 (variadic PValue) makes FUNCTION foo(...) / PValue()
  actually return the caller's variadic args instead of the caller's
  first LOCAL slot. AP_RPUTS / AP_ECHO can go back to their `( ... )`
  signature now.

  Five f3e0ffe (file-local STATIC FUNCTION) gives each .prg its own
  namespace for `STATIC FUNCTION name`, so the seven duplicate
  `STATIC FUNCTION fn_HGet` definitions across labdb's api/*.prg
  files no longer collide. The sed-renamed unique names can revert
  to the upstream definitions.

Files

  app/bridge/bridge_request.prg     ← cp from fivenode/native/
  app/api/{device-status,record-detail,records-list,session-detail,
           session-stats,sessions-list,session-export}.prg
                                    ← cp from fivenode/labdb/api/

fivenode-upstream is now byte-identical to fivenode_go's app/ copy
of those files. No more "// fivenode_go patch" comments, no more
file-prefix renames.

Verified end-to-end against the same live postgres@16 cluster:
  /api/admin-stats.prg    -> {"active_sessions":1,"devices":2,...}
  /api/sessions-list.prg  -> 2 rows w/ full session data
  /api/admin-devices.prg  -> 2 devices w/ api_key, created_at
  /api/hello.prg          -> hello (unchanged)
  /                       -> 200 text/html (static)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:36:14 +09:00

32 lines
1.2 KiB
Plaintext

// api/session-detail.prg — Format session detail response
// ctx: row (JSON of single session row joined with device)
FUNCTION Main()
LOCAL hRow
hRow := hb_jsonDecode(ctx_get("row", "{}"))
IF ! HB_ISHASH(hRow) .OR. Empty(hRow)
AP_JSONRESPONSE({ "error" => { "code" => "SESSION_NOT_FOUND", "message" => "session not found", "status" => 404 } }, 404)
RETURN NIL
ENDIF
AP_JSONRESPONSE({ ;
"sessionId" => fn_HGet(hRow, "session_id"), ;
"sessionName" => fn_HGet(hRow, "session_name"), ;
"deviceName" => fn_HGet(hRow, "device_name"), ;
"deviceAddress" => fn_HGet(hRow, "device_address"), ;
"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"), ;
"hwNumber" => fn_HGet(hRow, "hw_number"), ;
"serialNumber" => fn_HGet(hRow, "serial_number"), ;
"fwVersion" => fn_HGet(hRow, "fw_version"), ;
"status" => fn_HGet(hRow, "status") ;
})
RETURN NIL
STATIC FUNCTION fn_HGet(h, k)
IF HB_ISHASH(h) .AND. hb_HHasKey(h, k) ; RETURN h[k] ; ENDIF
RETURN ""