feat(lesereisen): Lesereise reader UI — curated document journey viewer #786
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Issue #750 introduced the data model:
GeschichteType.JOURNEY,JourneyItementity, and V72 migration that replaces the oldgeschichten_documentsjunction table.This issue implements the reader-facing UI for a Lesereise — a curated, ordered sequence of documents with editorial notes.
Goal
When a
Geschichtehastype: JOURNEY, the reader sees a step-by-step journey through documents rather than a prose story. Each stop (JourneyItem) shows the document thumbnail, title/date metadata, and an optional editor note. Clicking a stop opens the full document.Acceptance Criteria
Reader view (
/geschichten/[id])g.type === 'JOURNEY', render a journey layout instead of the prose layoutJourneyItemthat has adocumentIdshows:item.noteas editorial caption (if present)/documents/[documentId]documentId(note-only stops) show the note as a standalone editorial paragraphpositionorder (backend already returns them ordered)Editor view (
/geschichten/[id]/edit)g.type === 'JOURNEY', show the JourneyItem editor panel alongside the prose editor (prose body becomes optional/hidden for JOURNEY type)DocumentMultiSelector write a note-only itemitemsvia the backend API (new endpoint needed — see below)Backend (new endpoint)
PUT /api/geschichten/{id}/items— acceptsList<JourneyItemDTO>with{position, documentId?, note?}, replaces the item list atomicallyGeschichte(with items initialized)WRITE_ALLpermissionType toggle (create/edit)
GeschichteEditorgains atypeselector: STORY (default) / JOURNEY (Lesereise)Out of scope
Depends on
Closes / follows on from #750