-- Migration: 006 – Service tokens for external notification senders
-- Database: PostgreSQL
--
-- Service tokens allow external services (CI/CD, monitoring, admin scripts) to
-- POST /api/notify without a full user JWT.  Each token is identified by a
-- SHA-256 hash so the plaintext is never stored after creation.

CREATE TABLE IF NOT EXISTS service_tokens (
    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name        TEXT NOT NULL,
    token_hash  TEXT NOT NULL UNIQUE,
    created_by  UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    scopes      TEXT[] NOT NULL DEFAULT '{"notify"}',
    is_active   BOOLEAN NOT NULL DEFAULT TRUE,
    last_used_at TIMESTAMPTZ,
    expires_at  TIMESTAMPTZ,
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_service_tokens_hash   ON service_tokens(token_hash) WHERE is_active;
CREATE INDEX IF NOT EXISTS idx_service_tokens_creator ON service_tokens(created_by);
