mirror of
https://github.com/Patiun/com.gregkilmer.www.git
synced 2026-11-07 19:58:24 +00:00
Phase 6: sync jobs, inquiry and order forms
- Sync scheduler in the content service with a per-job cache (sync_cache), sync_runs reporting and Healthchecks pings. Jobs: Archidekt, BoardGameGeek, cover art (Open Library, TMDB, AniList), Suwayomi and Kavita reading progress, Bambuddy filament and Homebox material stock. A note's own value always wins over a synced one. - PersonalReader: updates only Library notes with a matching anilistId, changes to Greg's notes are held for review; Reading series with no note show as suggestions on the admin Overview. - /api/inquiries and /api/orders: Turnstile, rate limits, a saved copy in the content service (intake token) plus email over SMTP. Orders are re-checked against the live notes: accepted only when the category's ordersOpen is true and the line has capacity. - Admin Inbox for saved submissions. Options' inStock is optional so synced stock can fill it. All settings from process.env; .env.example per service. - Sources could not be reached from the build environment; parsers are tested against fixtures labelled as not live. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012aSbo2D1qP8cMFQCykf7kx
This commit is contained in:
@@ -87,7 +87,7 @@ export const baseFields = {
|
||||
created: isoDate({ title: "Created" }).optional(),
|
||||
updated: isoDate({ title: "Updated" }).optional(),
|
||||
updatedBy: z
|
||||
.enum(["greg", "agent", "admin"])
|
||||
.enum(["greg", "agent", "admin", "sync"])
|
||||
.meta({ title: "Last edited by", description: "Set by the content service; you never need to write it." })
|
||||
.optional(),
|
||||
agentEdits: z
|
||||
|
||||
@@ -116,6 +116,11 @@ export const libraryItem = def({
|
||||
note: line({ title: "Note", description: "Context, like where you are or how you came to it." }).optional(),
|
||||
progress: line({ title: "Progress", description: "Like 16/18 volumes. Synced from PersonalReader when linked." }).optional(),
|
||||
anilistId: z.number().int().meta({ title: "AniList id", description: "Links the item to PersonalReader's progress." }).optional(),
|
||||
kavitaSeriesId: z
|
||||
.number()
|
||||
.int()
|
||||
.meta({ title: "Kavita series id", description: "Links a book or light novel to its series in Kavita, for PersonalReader's progress." })
|
||||
.optional(),
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -415,7 +420,10 @@ export const productLine = def({
|
||||
group: line({ title: "Option group", description: "Like Filament, Leather or Thread." }),
|
||||
name: line({ title: "Name" }),
|
||||
hex: z.string().regex(/^#[0-9a-fA-F]{6}$/).meta({ title: "Color" }).optional(),
|
||||
inStock: z.boolean().meta({ title: "In stock" }),
|
||||
inStock: z
|
||||
.boolean()
|
||||
.meta({ title: "In stock", description: "Leave out to follow the synced stock (Bambuddy filament, Homebox leather and paper)." })
|
||||
.optional(),
|
||||
}),
|
||||
)
|
||||
.meta({ title: "Options" })
|
||||
|
||||
Reference in New Issue
Block a user