-- Service-Accounts & API-Token (IAM-09, siehe core-kanban/tickets/IAM-09.md).
-- Service-Accounts sind eine eigenstaendige Identitaetsklasse neben
-- menschlichen Benutzern (users), nicht dieselbe Tabelle (Zitadel-Vorbild).
CREATE TABLE service_accounts (
    id         UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name       TEXT NOT NULL,
    status     TEXT NOT NULL DEFAULT 'active',
    created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- token_hash enthaelt NIEMALS den Klartext-Token, nur dessen SHA-256-Hash.
CREATE TABLE api_tokens (
    id                 UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    service_account_id UUID NOT NULL REFERENCES service_accounts(id),
    token_hash         BYTEA NOT NULL UNIQUE,
    scopes             TEXT[] NOT NULL DEFAULT '{}',
    expires_at         TIMESTAMPTZ,
    revoked_at         TIMESTAMPTZ,
    created_at         TIMESTAMPTZ NOT NULL DEFAULT now()
);
