-- Durable per-device qts queue for channel-membership self-notifications -- (kick/ban/promote/demote/ownership transfer). Shares the qts number space -- in secret_qts_watermarks with encrypted_message_queue: a device has one -- qts sequence, and updateChannelParticipant rides it per the MTProto spec, -- so a disconnected device can recover a missed kick/ban via -- updates.getDifference instead of losing it once its live push is missed. CREATE TABLE public.channel_participant_event_queue ( receiver_auth_key_id bigint NOT NULL, qts integer NOT NULL, receiver_user_id bigint NOT NULL, channel_id bigint NOT NULL, actor_user_id bigint NOT NULL, date integer NOT NULL, previous_participant jsonb, new_participant jsonb, acked boolean DEFAULT false NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, PRIMARY KEY (receiver_auth_key_id, qts) ); CREATE INDEX idx_cpeq_unacked ON public.channel_participant_event_queue USING btree (receiver_auth_key_id, qts) WHERE (acked = false);