blogimport: published-posts source contract + blog-side draft (76/76)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 55s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 55s
source.sx refactored to a single published-posts batch query returning full rows (incl. lexical) — the existing post-by-id/slug DTO lacks lexical (sx_content/html only), so the canonical lexical->blocks path needs a dedicated migration provider. backfill-ids! now filters client-side (no extra query). drafts/published-posts.sx + drafts/README.md: paste-ready blog-app change (defquery + SqlBlogService.list_published_posts returning rows incl. raw lexical). README updated. source 21/21; total 76/76. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
(content-bootstrap-callout!)
|
||||
(content-bootstrap-media!)
|
||||
|
||||
; ---- canned service responses (lexical arrives as a JSON STRING, the DB column) ----
|
||||
; ---- canned service rows (lexical arrives as a JSON STRING, the DB column) ----
|
||||
(define
|
||||
lex1
|
||||
"{\"root\":{\"children\":[{\"type\":\"heading\",\"tag\":\"h2\",\"children\":[{\"type\":\"text\",\"text\":\"Live\"}]},{\"type\":\"paragraph\",\"children\":[{\"type\":\"text\",\"text\":\"from db\"}]}]}}")
|
||||
@@ -19,16 +19,12 @@
|
||||
:lexical "{\"children\":[{\"type\":\"paragraph\",\"children\":[{\"type\":\"text\",\"text\":\"second\"}]}]}"})
|
||||
|
||||
; ---- mock transport: (fetch-fn query params) -> response ----
|
||||
; the `published-posts` migration query returns full rows (incl. lexical) in one batch.
|
||||
(define
|
||||
mock-fetch
|
||||
(fn (query params)
|
||||
(cond
|
||||
((equal? query "published-posts") (list "post-1" "post-2"))
|
||||
((equal? query "post-by-id")
|
||||
(cond
|
||||
((equal? (get params :id) "post-1") row1)
|
||||
((equal? (get params :id) "post-2") row2)
|
||||
(else nil)))
|
||||
((equal? query "published-posts") (list row1 row2))
|
||||
(else nil))))
|
||||
|
||||
; ---- parse-row maps fields + parses the lexical JSON string ----
|
||||
@@ -49,8 +45,8 @@
|
||||
(bi-test "parse-row structured lexical used as-is"
|
||||
(map blk-type (blogimport/lex-blocks (get post3 :lexical))) (list "text"))
|
||||
|
||||
; ---- enumeration + source-posts ----
|
||||
(bi-test "published-ids" (blogimport/published-ids mock-fetch) (list "post-1" "post-2"))
|
||||
; ---- source-rows / source-posts ----
|
||||
(bi-test "source-rows count" (len (blogimport/source-rows mock-fetch)) 2)
|
||||
(bi-test "source-posts ids"
|
||||
(map (fn (p) (get p :id)) (blogimport/source-posts mock-fetch))
|
||||
(list "post-1" "post-2"))
|
||||
@@ -76,8 +72,9 @@
|
||||
(bi-test "sync-verify ok" (get sv :ok) 2)
|
||||
(bi-test "sync-verify no mismatch" (get sv :mismatched) (list))
|
||||
|
||||
; ---- explicit-id fallback path (before the enumeration query lands) ----
|
||||
; ---- partial backfill: client-side id filter (no extra blog query) ----
|
||||
(define B2 (persist/open))
|
||||
(define covx (blogimport/backfill-ids! B2 mock-fetch (list "post-2") 10))
|
||||
(bi-test "backfill-ids imported" (get covx :imported) 1)
|
||||
(bi-test "backfill-ids post-2 ids" (doc-ids (content/head B2 "post-2")) (list "b0"))
|
||||
(bi-test "backfill-ids other not imported" (content/version-count B2 "post-1") 0)
|
||||
|
||||
Reference in New Issue
Block a user