-- Per-license API key management -- Each row represents one issued key: the plaintext is shown once at creation -- and never stored; only the SHA-256 hex digest is persisted. CREATE TABLE IF NOT EXISTS api_keys ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), license_id UUID NOT NULL REFERENCES licenses(id) ON DELETE CASCADE, name VARCHAR(100) NOT NULL, key_prefix VARCHAR(16) NOT NULL, key_hash VARCHAR(128) NOT NULL, last_used_at TIMESTAMPTZ NULL, is_active BOOLEAN NOT NULL DEFAULT TRUE, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_api_keys_license ON api_keys(license_id); CREATE INDEX IF NOT EXISTS idx_api_keys_key_hash ON api_keys(key_hash);