CREATE TABLE api_keys ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE, name text NOT NULL CHECK (length(btrim(name)) BETWEEN 1 AND 128), prefix text NOT NULL UNIQUE CHECK (prefix ~ '^oc_[a-z0-9]{8}$'), key_hash bytea NOT NULL UNIQUE, expires_at timestamptz, enabled boolean NOT NULL DEFAULT true, created_at timestamptz NOT NULL DEFAULT now(), last_used_at timestamptz ); CREATE INDEX api_keys_user_idx ON api_keys(user_id,created_at DESC); CREATE INDEX api_keys_active_idx ON api_keys(prefix) WHERE enabled;