CREATE TABLE IF NOT EXISTS activity_logs ( id BIGSERIAL PRIMARY KEY, actor_id BIGINT NULL, actor_role TEXT NULL, action TEXT NOT NULL, resource_type TEXT NOT NULL, resource_id BIGINT NULL, message TEXT NULL, metadata JSONB NOT NULL DEFAULT '{}'::jsonb, ip_address TEXT NULL, user_agent TEXT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_activity_logs_created_at ON activity_logs (created_at DESC); CREATE INDEX IF NOT EXISTS idx_activity_logs_actor ON activity_logs (actor_id, created_at DESC); CREATE INDEX IF NOT EXISTS idx_activity_logs_resource ON activity_logs (resource_type, resource_id, created_at DESC); CREATE INDEX IF NOT EXISTS idx_activity_logs_action ON activity_logs (action, created_at DESC);