feat: metadata enrichment queue (#67) #77

Merged
marcel merged 2 commits from feature/67-metadata-enrichment-queue into main 2026-03-26 14:50:35 +01:00
Owner

Summary

Closes #67.

Adds a focused post-scan enrichment workflow: after bulk uploading documents, users can work through a queue of incomplete documents one by one without hunting through the main list.

Backend

  • Migration V15: adds metadata_complete BOOLEAN NOT NULL DEFAULT TRUE — existing rows are marked complete; new uploads start as false
  • 3 new endpoints: GET /api/documents/incomplete-count, /incomplete, /incomplete/next?excludeId=
  • metadataComplete logic by source:
    • Drop zone uploads → always false
    • New document page → explicit flag from button choice
    • Mass importer → false only if date + sender + receivers are all missing (heuristic)
    • Edit page → unchanged unless "Mark for review" clicked

Frontend

  • Home page: "Needs metadata" card with count badge, links to /enrich (hidden when queue is empty)
  • /enrich: list of incomplete documents, newest first; "Start reviewing" jumps to first item
  • /enrich/[id]: full-height split view — PDF preview left, compact form right (title, date, sender, receivers, tags). Actions: Skip (advance without saving) · Save (partial save, stay incomplete) · Save & mark as reviewed (sets metadataComplete=true, advances)
  • /enrich/done: shown when no more incomplete documents remain
  • New document page: single save button replaced with Save (→ incomplete) and Save & reviewed (→ complete)
  • Edit page SaveBar: new "Mark for review" secondary button pushes a document back into the enrichment queue

Test plan

  • All 205 backend tests pass (./mvnw test)
  • Upload several files via drop zone → home page shows "Needs metadata" card with correct count
  • Click card → /enrich list shows all uploaded docs, newest first
  • Click "Start reviewing" → /enrich/[id] opens with PDF preview and form
  • Fill some fields + Save → advances to next doc, count decreases
  • Fill all fields + "Save & mark as reviewed" → doc disappears from queue
  • Click Skip → advances without saving, doc stays in queue
  • After last doc → /enrich/done shown; home page card disappears
  • New document page: Save creates incomplete doc; Save & reviewed creates complete doc
  • Edit page: "Mark for review" pushes existing doc back into queue without losing other metadata
  • Mass import: rows with date/sender/receivers → metadataComplete=true; rows with all three missing → false
  • Fix Paraglide file permissions and run npm run check to validate types

Note: The Paraglide generated files (src/lib/paraglide/messages/*.js) are root-owned from a Docker run. Run sudo chown -R $USER:$USER frontend/src/lib/paraglide/ && npm run dev once to regenerate them from the updated messages/*.json sources before running npm run check.

🤖 Generated with Claude Code

## Summary Closes #67. Adds a focused post-scan enrichment workflow: after bulk uploading documents, users can work through a queue of incomplete documents one by one without hunting through the main list. ### Backend - **Migration V15**: adds `metadata_complete BOOLEAN NOT NULL DEFAULT TRUE` — existing rows are marked complete; new uploads start as `false` - **3 new endpoints**: `GET /api/documents/incomplete-count`, `/incomplete`, `/incomplete/next?excludeId=` - **`metadataComplete` logic by source**: - Drop zone uploads → always `false` - New document page → explicit flag from button choice - Mass importer → `false` only if date + sender + receivers are all missing (heuristic) - Edit page → unchanged unless "Mark for review" clicked ### Frontend - **Home page**: "Needs metadata" card with count badge, links to `/enrich` (hidden when queue is empty) - **`/enrich`**: list of incomplete documents, newest first; "Start reviewing" jumps to first item - **`/enrich/[id]`**: full-height split view — PDF preview left, compact form right (title, date, sender, receivers, tags). Actions: **Skip** (advance without saving) · **Save** (partial save, stay incomplete) · **Save & mark as reviewed** (sets `metadataComplete=true`, advances) - **`/enrich/done`**: shown when no more incomplete documents remain - **New document page**: single save button replaced with Save (→ incomplete) and Save & reviewed (→ complete) - **Edit page SaveBar**: new "Mark for review" secondary button pushes a document back into the enrichment queue ## Test plan - [ ] All 205 backend tests pass (`./mvnw test`) - [ ] Upload several files via drop zone → home page shows "Needs metadata" card with correct count - [ ] Click card → `/enrich` list shows all uploaded docs, newest first - [ ] Click "Start reviewing" → `/enrich/[id]` opens with PDF preview and form - [ ] Fill some fields + Save → advances to next doc, count decreases - [ ] Fill all fields + "Save & mark as reviewed" → doc disappears from queue - [ ] Click Skip → advances without saving, doc stays in queue - [ ] After last doc → `/enrich/done` shown; home page card disappears - [ ] New document page: Save creates incomplete doc; Save & reviewed creates complete doc - [ ] Edit page: "Mark for review" pushes existing doc back into queue without losing other metadata - [ ] Mass import: rows with date/sender/receivers → `metadataComplete=true`; rows with all three missing → `false` - [ ] Fix Paraglide file permissions and run `npm run check` to validate types > **Note:** The Paraglide generated files (`src/lib/paraglide/messages/*.js`) are root-owned from a Docker run. Run `sudo chown -R $USER:$USER frontend/src/lib/paraglide/ && npm run dev` once to regenerate them from the updated `messages/*.json` sources before running `npm run check`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
marcel added 2 commits 2026-03-26 13:47:12 +01:00
Adds a metadata_complete column (default true for existing rows) to drive
the enrichment queue. New drop-zone uploads always start as false; createDocument
uses an explicit DTO flag or a heuristic (any of date/sender/receivers present →
true); the mass importer applies the same heuristic per row.

New endpoints: GET /api/documents/incomplete-count, /incomplete, /incomplete/next.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat(enrich): add metadata enrichment queue UI
Some checks failed
CI / Unit & Component Tests (pull_request) Successful in 2m19s
CI / Backend Unit Tests (pull_request) Successful in 2m11s
CI / E2E Tests (pull_request) Failing after 29m32s
CI / Unit & Component Tests (push) Successful in 2m21s
CI / Backend Unit Tests (push) Successful in 2m12s
CI / E2E Tests (push) Failing after 28m54s
aab9e9a4b0
Home page shows "Needs metadata" card when incomplete documents exist.
/enrich list shows all incomplete documents; /enrich/[id] provides a
split PDF-preview + compact form view with Skip / Save / Save & reviewed
actions that auto-advance through the queue.

New document page gets Save vs Save & reviewed split. Edit page gets
"Mark for review" secondary button to push a document back into the queue.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
marcel merged commit aab9e9a4b0 into main 2026-03-26 14:50:35 +01:00
marcel deleted branch feature/67-metadata-enrichment-queue 2026-03-26 14:50:39 +01:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: marcel/familienarchiv#77