mirror of
https://github.com/andwati/andwati.com.git
synced 2026-10-29 22:12: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:
@@ -58,7 +58,7 @@ const bookshelf = defineCollection({
|
||||
url: z.string().optional(),
|
||||
cover_image: z.string().optional(),
|
||||
rating: z.number().optional(),
|
||||
status: z.enum(["reading", "read", "abandoned"]).optional(),
|
||||
read_status: z.enum(["reading", "read", "abandoned"]).optional(),
|
||||
date_started: z.coerce.date().optional(),
|
||||
date_finished: z.coerce.date().optional(),
|
||||
taxonomies,
|
||||
|
||||
@@ -19,7 +19,7 @@ const items = (await getCollection("bookshelf")).sort(
|
||||
</h3>
|
||||
<p class="meta">{entry.data.authors.join(", ")}</p>
|
||||
{entry.data.rating && <p class="meta">{"★".repeat(entry.data.rating)}</p>}
|
||||
{entry.data.status && <p class="meta">{entry.data.status}</p>}
|
||||
{entry.data.read_status && <p class="meta">{entry.data.read_status}</p>}
|
||||
{entry.data.kind === "book" && entry.data.isbn && <p class="meta">ISBN {entry.data.isbn}</p>}
|
||||
{entry.data.kind === "paper" && entry.data.arxiv_id && (
|
||||
<p class="meta">
|
||||
|
||||
Reference in New Issue
Block a user