-- Druck-Historie: was zuletzt gedruckt wurde ------------------------------ -- -- Gespeichert wird **nur die Anleitung**, nicht das Ergebnis: die -- Bogen-Einstellung, die Verweise auf die Quellbilder und ein paar Eckdaten. -- Ein A3-Druckbogen als PDF ist schnell 20–80 MB; bei ein paar Dutzend -- Drucken wäre die Platte voll, und zwar mit Dateien, die sich in Sekunden -- neu erzeugen lassen. Der Bogen wird beim erneuten Drucken einfach neu -- gerechnet — deterministisch, aus denselben Quellen. -- -- Zeilengröße: rund 1–3 KB je Eintrag. Tausend Drucke sind damit ein paar -- Megabyte statt vieler Gigabyte. CREATE TABLE IF NOT EXISTS print_runs ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), created_by uuid REFERENCES users(id) ON DELETE SET NULL, -- Woher der Druck kam: 'web' | 'telegram' | 'mcp' | 'api' origin text NOT NULL DEFAULT 'web', -- Sprechende Kurzfassung für die Liste („13 × 18 cm ×1, 35 × 45 mm ×8"). summary text, paper text, -- „DIN A4 · 210 × 297 mm" pages integer NOT NULL DEFAULT 1, pieces integer NOT NULL DEFAULT 1, bytes integer, -- Größe des erzeugten PDFs, nur zur Information -- Die vollständige Anfrage, aus der sich der Bogen neu erzeugen lässt. -- Bewusst der Anfragekörper und nicht ein eigenes Format: Was hier steht, -- lässt sich unverändert wieder an /api/print/sheet schicken. config jsonb NOT NULL, created_at timestamptz NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS print_runs_user_idx ON print_runs(created_by, created_at DESC); CREATE INDEX IF NOT EXISTS print_runs_created_idx ON print_runs(created_at DESC); -- Welche Bibliotheksbilder in einem Druck steckten. Nur für Bilder aus der -- Bibliothek — hochgeladene Einzeldateien haben keine dauerhafte Kennung und -- sind nach dem Aufräumen der Quellen ohnehin weg. CREATE TABLE IF NOT EXISTS print_run_items ( run_id uuid NOT NULL REFERENCES print_runs(id) ON DELETE CASCADE, item_id uuid NOT NULL REFERENCES items(id) ON DELETE CASCADE, PRIMARY KEY (run_id, item_id) ); CREATE INDEX IF NOT EXISTS print_run_items_item_idx ON print_run_items(item_id);