CREATE TABLE IF NOT EXISTS user_bans ( id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT, banned_by BIGINT REFERENCES users(id) ON DELETE RESTRICT, reason TEXT, starts_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, ends_at TIMESTAMPTZ, revoked_at TIMESTAMPTZ, revoked_by BIGINT REFERENCES users(id) ON DELETE RESTRICT ); CREATE INDEX IF NOT EXISTS idx_user_bans_user ON user_bans(user_id, starts_at DESC); CREATE INDEX IF NOT EXISTS idx_user_bans_banned_by ON user_bans(banned_by, starts_at DESC) WHERE banned_by IS NOT NULL;