mirror of
https://github.com/andwati/andwati.com.git
synced 2026-10-29 14:02:15 +00:00
Add bookshelf ISBN/paper enrichment, fix status field name collision
apps/cms/src/utils/bookshelf-covers.ts fetches book covers from Open Library by ISBN (real image, cached into apps/site/public/covers/) and backfills missing title/authors for papers from Semantic Scholar by DOI/arXiv id. Wired into the sync middleware in content-sync.ts: runs once per entry (cover_image already set means "done"), and only on live create/update through Strapi, not during the boot-time import (so a restart doesn't hammer external APIs). Also renames the bookshelf `status` field to `read_status` everywhere (schema, content/README.md, seed content, Astro zod schema, bookshelf page, sync mapping). Strapi's content-manager API treats a top-level `status` key as its own reserved draft/publish parameter even with draftAndPublish disabled, so an attribute literally named `status` silently rejected every write — caught this while testing the enrichment hook. Verified end-to-end: created a book by ISBN with no cover_image, confirmed a real cover image was downloaded and cached, cover_image was set on the entry and written to the file, and the cover/file were both removed on delete.
This commit is contained in:
+12
-4
@@ -59,9 +59,17 @@ Body is a free-form Markdown case study.
|
||||
## `bookshelf/` (books *and* papers)
|
||||
|
||||
`kind` selects which identifier fields apply — books use `isbn`, papers use
|
||||
`doi`/`arxiv_id`. Cover images are fetched by a lookup (Open Library/Google
|
||||
Books for ISBNs; Semantic Scholar/arXiv for papers) and cached under
|
||||
`static/covers/`, never fetched at page-render time.
|
||||
`doi`/`arxiv_id`. Book covers are fetched from Open Library by ISBN and
|
||||
cached into `apps/site/public/covers/` (served at `/covers/...`), never
|
||||
fetched at page-render time. Papers have no reliable cover source, so
|
||||
`cover_image` is set manually for them, if at all; Semantic Scholar is only
|
||||
used to backfill a missing title/authors by DOI/arXiv id.
|
||||
|
||||
Note: the field is named `read_status`, not `status` — Strapi's
|
||||
content-manager API treats a top-level `status` key as its own reserved
|
||||
draft/publish parameter even with `draftAndPublish` disabled, so an
|
||||
attribute literally named `status` silently breaks writes. Don't rename it
|
||||
back.
|
||||
|
||||
```toml
|
||||
+++
|
||||
@@ -74,7 +82,7 @@ arxiv_id = "2101.00001" # papers only, optional
|
||||
url = "https://..." # papers only: landing page / source link
|
||||
cover_image = "/covers/slug.jpg"
|
||||
rating = 5 # optional, 1-5
|
||||
status = "read" # "reading" | "read" | "abandoned"
|
||||
read_status = "read" # "reading" | "read" | "abandoned"
|
||||
date_started = 2026-01-01
|
||||
date_finished = 2026-01-20 # optional, omit if still in progress
|
||||
[taxonomies]
|
||||
|
||||
@@ -7,7 +7,7 @@ arxiv_id = "1706.03762"
|
||||
url = "https://arxiv.org/abs/1706.03762"
|
||||
cover_image = "/covers/attention-is-all-you-need.jpg"
|
||||
rating = 5
|
||||
status = "read"
|
||||
read_status = "read"
|
||||
date_started = 2026-02-01
|
||||
date_finished = 2026-02-03
|
||||
[taxonomies]
|
||||
|
||||
@@ -5,7 +5,7 @@ authors = ["Harold Abelson", "Gerald Jay Sussman"]
|
||||
isbn = "9780262510875"
|
||||
cover_image = "/covers/structure-and-interpretation-of-computer-programs.jpg"
|
||||
rating = 5
|
||||
status = "read"
|
||||
read_status = "read"
|
||||
date_started = 2026-01-01
|
||||
date_finished = 2026-01-20
|
||||
[taxonomies]
|
||||
|
||||
Reference in New Issue
Block a user