-- 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);
