host: Phase 1 — router + handler + GET /feed endpoint on Dream, 28/28
First migrated endpoint onto the SX host. lib/host is a thin wiring layer: a host handler is a Dream handler (request->response) that calls a subsystem public API and serialises via a shared JSON envelope. - handler.sx: host/ok, host/ok-status, host/error, host/json-status (Dream's dream-json is 200-only), host/query-int - router.sx: host/make-app assembles per-domain route groups + /health probe into one dream-router (reuses dr/flatten-routes) - feed.sx: GET /feed reads feed/all + stream combinators, recent-first, with ?actor= filter and ?limit= cap - 3 test suites incl. a golden test (body == subsystem recent stream + envelope) - conformance.sh mirrors lib/dream's runner Builds on dream-on-sx (merged, gate green 480/480) rather than a throwaway native request model; collapses most of plan Phase 4 into Phase 1. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
22
lib/host/feed.sx
Normal file
22
lib/host/feed.sx
Normal file
@@ -0,0 +1,22 @@
|
||||
;; lib/host/feed.sx — Feed domain endpoints on the host. The first real endpoint
|
||||
;; migrated onto the SX host: the activity timeline, read straight from the feed
|
||||
;; subsystem's public API (feed/all + the stream combinators) and serialised as
|
||||
;; JSON. GET /feed returns recent-first activities; ?actor=<id> filters by actor
|
||||
;; and ?limit=<n> caps the count. Depends on lib/feed/* + lib/host/handler.sx.
|
||||
|
||||
;; GET /feed -> recent-first activities as a JSON envelope.
|
||||
;; Query: ?actor=<id> (filter) ?limit=<n> (cap, applied after filtering).
|
||||
(define host/feed-timeline
|
||||
(fn (req)
|
||||
(let ((base (feed/recent (feed/all)))
|
||||
(actor (dream-query-param req "actor")))
|
||||
(let ((filtered (if actor (feed/by-actor base actor) base))
|
||||
(limit (dream-query-param req "limit")))
|
||||
(let ((capped
|
||||
(if limit (feed/take filtered (string->number limit)) filtered)))
|
||||
(host/ok (feed/items capped)))))))
|
||||
|
||||
;; Route group contributed by the feed domain.
|
||||
(define host/feed-routes
|
||||
(list
|
||||
(dream-get "/feed" host/feed-timeline)))
|
||||
Reference in New Issue
Block a user