-- Aktive-Sitzungen-Verwaltung (IAM-12, siehe core-kanban/tickets/IAM-12.md).
-- Bewusst SERVERSEITIG mit widerrufbarem Zustand — anders als IAM-02s
-- zustandsloses JWT (API-05-Entscheidung fuer Modul-zu-Modul-Vertrauen),
-- braucht die Selbstbedienungs-Sitzungsuebersicht einen Ort, an dem eine
-- einzelne Sitzung sofort und nachweislich ungueltig gemacht werden kann.
-- token_hash enthaelt NIEMALS den Klartext-Token, nur dessen SHA-256-Hash.
CREATE TABLE sessions (
    id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id       UUID NOT NULL REFERENCES users(id),
    token_hash    BYTEA NOT NULL UNIQUE,
    device_info   TEXT NOT NULL DEFAULT '',
    ip            TEXT NOT NULL DEFAULT '',
    created_at    TIMESTAMPTZ NOT NULL DEFAULT now(),
    last_seen_at  TIMESTAMPTZ NOT NULL DEFAULT now(),
    revoked_at    TIMESTAMPTZ
);

CREATE INDEX sessions_user_idx ON sessions (user_id);
