-- 0011_attachments.sql -- -- Metadaten-Registry für hochgeladene Dateien (aktuell Bild-Notizen). -- -- Die eigentlichen Bytes liegen in DOCUframe; hier halten wir die -- Metadaten und die DOCUframe-Referenz (`docuframe_object_id` = ~ObjectID). -- Die App referenziert ausschließlich `attachments.id` (unsere UUID) — -- DOCUframe bleibt damit ein austauschbares Implementierungsdetail -- (z. B. später Object-Storage statt DOCUframe). -- -- Verknüpfung zur Notiz: `delivery_notes.image_attachment` enthält die -- `attachments.id` (als Text). Über `delivery_id` hängt der Anhang -- zusätzlich direkt an der Lieferung (CASCADE-Cleanup). CREATE TABLE attachments ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), -- DOCUframe ~ObjectID — für den späteren Download der Bytes. docuframe_object_id TEXT NOT NULL, mime_type TEXT NOT NULL, size_bytes BIGINT NOT NULL CHECK (size_bytes >= 0), -- Originaldateiname beim Upload (optional). filename TEXT, -- SHA-256 der Bytes (Hex) — Integrität / Dedup. checksum_sha256 TEXT NOT NULL, -- Bildabmessungen in Pixeln (nullable: nicht jede Datei ist ein Bild -- bzw. das Format ist evtl. nicht erkennbar). width INT, height INT, -- Personalnummer des Hochladenden (aus dem JWT). uploaded_by BIGINT NOT NULL, uploaded_at TIMESTAMPTZ NOT NULL DEFAULT now(), delivery_id UUID NOT NULL REFERENCES deliveries(id) ON DELETE CASCADE ); CREATE INDEX attachments_delivery ON attachments(delivery_id);