Files
familienarchiv/docs/architecture/c4/l3-frontend-3b-document-workflows.puml
Marcel 87af9ab446
All checks were successful
CI / Unit & Component Tests (pull_request) Successful in 3m22s
CI / OCR Service Tests (pull_request) Successful in 22s
CI / Backend Unit Tests (pull_request) Successful in 3m45s
CI / fail2ban Regex (pull_request) Successful in 42s
CI / Semgrep Security Scan (pull_request) Successful in 23s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m6s
CI / Unit & Component Tests (push) Successful in 3m19s
CI / OCR Service Tests (push) Successful in 25s
CI / Backend Unit Tests (push) Successful in 3m51s
CI / fail2ban Regex (push) Successful in 48s
CI / Semgrep Security Scan (push) Successful in 22s
CI / Compose Bucket Idempotency (push) Successful in 1m6s
docs(c4): add smart-search components to l3-frontend diagram (#739 review)
Markus (architect): document SearchFilterBar + the search/ components
(SmartModeToggle, InterpretationChipRow, SmartSearchStatus,
DisambiguationPicker) and the POST /api/search/nl relation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 18:27:00 +02:00

5.5 KiB

Component Diagram: Web Frontend — Document WorkflowsComponent Diagram: Web Frontend — Document WorkflowsWeb Frontend (SvelteKit / SSR)[system]«component»/ (Home / Search)[SvelteKit Route] Loader: parses URL params(q, from, to, senderId,receiverId, tags), fetches/api/documents/search and/api/persons. Renderssearch form with full-text,date range, sender/receivertypeahead, and tag filters.«component»/documents/+page.ts[SvelteKit Client Loader] Client-side load gated bymatchMedia('(min-width:1024px)') and ?view query.Fetches/api/documents/density onlyon desktop (Tailwind lgbreakpoint) and outsidecalendar view; degrades toempty buckets on networkfailure.«component»TimelineDensityFilter.svelte[Svelte Component] Per-month density barsabove the document list.Click selects a single month,emits onchange({from, to})using YYYY-MM-DDboundaries. Hidden onmobile and tablet (below lg,1024px) and in calendarview.«component»SearchFilterBar.svelte[Svelte Component] Search/filter card on/documents. Hosts thekeyword input, sort,advanced filters, and thesmart-mode toggle. Insmart mode submits the NLquery on Enter viaonSmartSearch instead ofthe live keyword search.«component»search/SmartModeToggle.svelte[Svelte Component] Toggle pill (KI/Text) insidethe search input.aria-pressed; switchesbetween keyword and NL(smart) search modes.«component»search/InterpretationChipRow.svelte[Svelte Component] Renders NL interpretationchips (Absender /directional / Zeitraum /Stichwort). Removing a chipemits onRemoveChip; thepage re-runs a keyword GETwith the remaining params.«component»search/SmartSearchStatus.svelte[Svelte Component] Full-area panels for NLsearch: loading(role=status), 503SMART_SEARCH_UNAVAILABLE(with keyword fallback), 429SMART_SEARCH_RATE_LIMITED.«component»search/DisambiguationPicker.svelte[Svelte Component] Accessible single-selectdisclosure for ambiguousperson names; selecting acandidate re-runs thesearch via GET.«component»/documents/[id][SvelteKit Route] Loader: GET/api/documents/{id}. Page:metadata panel, inline fileviewer, transcription editor,annotation layer, andcomment thread.«component»/documents/[id]/edit[SvelteKit Route] Edit form withPersonTypeahead,TagInput, date/locationfields. Form action: PUT/api/documents/{id}.«component»/documents/new[SvelteKit Route] Upload form for a newdocument. Loader: GET/api/persons. Form action:POST /api/documents withmultipart file.«component»/documents/bulk-edit[SvelteKit Route] Multi-document metadataeditor. Loader: GET/api/documents/incomplete.Requires WRITE_ALL(redirects otherwise).Action: PATCH/api/documents/bulk.«component»/enrich/[id][SvelteKit Route] Guided enrichmentworkflow. Loader: GET/api/documents/{id}.Progressively savesannotations andtranscription blocks.«component»/api/persons(SvelteKit API)[SvelteKit Server Route] Proxies GET/api/persons?q=... tobackend forPersonTypeaheadsuggestions.«component»/api/tags (SvelteKitAPI)[SvelteKit Server Route] Proxies GET /api/tags tobackend for TagInputautocomplete.«component»PersonTypeahead.svelte[Svelte Component] Async autocomplete forselecting a person.Debounces input, calls/api/persons?q=.«component»TagInput.svelte[Svelte Component] Multi-tag input. Supportsfree-text entry andselecting existing tags from/api/tags.«person»User«container»API Backend[Spring Boot]Searches andbrowses[HTTPS / Browser]GET/api/documents/search,GET /api/persons[HTTP / JSON]POST /api/search/nl(smart mode)[HTTP / JSON]GET/api/documents/density(desktop only,≥1024px)[HTTP / JSON]Mounts above theresult listMounts thesearch/filter cardEmbeds thesmart-mode toggle inthe inputRenders loading / 503/ 429 panelsRendersinterpretation chips;handles chip removalRenders the pickerwhen names areambiguousProvides density /minDate / maxDatepropsGET/api/documents/{id},GET/api/documents/{id}/file[HTTP / JSON + Binary]PUT/api/documents/{id}[HTTP / Multipart]GET /api/persons,POST /api/documents[HTTP / JSON +Multipart]GET/api/documents/incomplete,PATCH/api/documents/bulk[HTTP / JSON]GET/POST/api/transcription,POST/api/documents/{id}/annotations[HTTP / JSON]Uses forsender/receiver filterUses forsender/receiverselectionUses for senderselectionUses for tagmanagementFetches suggestions[HTTP]Fetches existing tags[HTTP]GET /api/persons[HTTP / JSON]GET /api/tags[HTTP / JSON]