33 lines
1.3 KiB
SQL
33 lines
1.3 KiB
SQL
CREATE TABLE IF NOT EXISTS gateway_audit_logs (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
category text NOT NULL DEFAULT 'system',
|
|
action text NOT NULL,
|
|
actor_gateway_user_id uuid REFERENCES gateway_users(id) ON DELETE SET NULL,
|
|
actor_user_id text,
|
|
actor_username text,
|
|
actor_source text,
|
|
actor_roles jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
target_type text NOT NULL,
|
|
target_id text NOT NULL,
|
|
target_gateway_user_id uuid REFERENCES gateway_users(id) ON DELETE SET NULL,
|
|
target_gateway_tenant_id uuid REFERENCES gateway_tenants(id) ON DELETE SET NULL,
|
|
request_ip text,
|
|
user_agent text,
|
|
before_state jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
after_state jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_gateway_audit_logs_category_created
|
|
ON gateway_audit_logs(category, created_at DESC);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_gateway_audit_logs_action_created
|
|
ON gateway_audit_logs(action, created_at DESC);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_gateway_audit_logs_target
|
|
ON gateway_audit_logs(target_type, target_id, created_at DESC);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_gateway_audit_logs_actor
|
|
ON gateway_audit_logs(actor_gateway_user_id, created_at DESC);
|