-- GoChat Rate Limit State Table -- Stores rate limit counters per client IP for sliding window enforcement. -- Reference: Chatwoot Rack::Attack throttle configuration CREATE TABLE IF NOT EXISTS rate_limit_states ( id SERIAL PRIMARY KEY, key VARCHAR(255) NOT NULL UNIQUE, count INTEGER NOT NULL DEFAULT 0, window_start TIMESTAMP WITH TIME ZONE NOT NULL, expires_at TIMESTAMP WITH TIME ZONE NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); CREATE INDEX idx_rate_limit_states_key ON rate_limit_states(key); CREATE INDEX idx_rate_limit_states_expires ON rate_limit_states(expires_at);