fix: sync non-PTS privacy updates
This commit is contained in:
parent
6cafa40c7b
commit
cc76cd3679
17 changed files with 196 additions and 421 deletions
|
|
@ -1,17 +1 @@
|
|||
ALTER TABLE public.user_update_events DROP CONSTRAINT IF EXISTS user_update_events_type_check;
|
||||
ALTER TABLE public.user_update_events ADD CONSTRAINT user_update_events_type_check CHECK (
|
||||
(event_type)::text = ANY (ARRAY[
|
||||
'new_message', 'read_history_inbox', 'read_history_outbox', 'read_message_contents',
|
||||
'edit_message', 'web_page', 'message_reactions', 'message_poll', 'draft_message', 'quick_replies',
|
||||
'new_quick_reply', 'delete_quick_reply', 'quick_reply_message', 'delete_quick_reply_messages',
|
||||
'contacts_reset', 'dialog_pinned', 'pinned_dialogs', 'pinned_messages', 'dialog_unread_mark',
|
||||
'peer_settings', 'peer_story_blocked', 'user_phone', 'user_emoji_status', 'delete_messages',
|
||||
'dialog_filter', 'dialog_filter_order', 'dialog_filters', 'folder_peers',
|
||||
'channel_available_messages', 'channel_view_forum_as_messages', 'channel_state',
|
||||
'saved_dialog_pinned', 'pinned_saved_dialogs', 'story', 'read_stories',
|
||||
'sent_story_reaction', 'new_story_reaction', 'noop',
|
||||
'read_channel_discussion_inbox', 'read_channel_discussion_outbox'
|
||||
]::text[])
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS public.user_update_privacy_payloads;
|
||||
-- Reserved development migration version; up is intentionally a no-op.
|
||||
|
|
|
|||
|
|
@ -1,30 +1,5 @@
|
|||
-- Privacy settings are absolute account state. Persist the immutable rule
|
||||
-- snapshot next to the account pts event so other online sessions and offline
|
||||
-- getDifference replay exactly the committed value without re-querying the
|
||||
-- mutable account_privacy_rules row.
|
||||
CREATE TABLE public.user_update_privacy_payloads (
|
||||
user_id bigint NOT NULL,
|
||||
pts integer NOT NULL CHECK (pts > 0),
|
||||
payload jsonb NOT NULL CHECK (jsonb_typeof(payload) = 'object'),
|
||||
PRIMARY KEY (user_id, pts),
|
||||
CONSTRAINT user_update_privacy_payloads_event_fk
|
||||
FOREIGN KEY (user_id, pts)
|
||||
REFERENCES public.user_update_events(user_id, pts)
|
||||
ON DELETE CASCADE
|
||||
);
|
||||
|
||||
ALTER TABLE public.user_update_events DROP CONSTRAINT IF EXISTS user_update_events_type_check;
|
||||
ALTER TABLE public.user_update_events ADD CONSTRAINT user_update_events_type_check CHECK (
|
||||
(event_type)::text = ANY (ARRAY[
|
||||
'new_message', 'read_history_inbox', 'read_history_outbox', 'read_message_contents',
|
||||
'edit_message', 'web_page', 'message_reactions', 'message_poll', 'draft_message', 'quick_replies',
|
||||
'new_quick_reply', 'delete_quick_reply', 'quick_reply_message', 'delete_quick_reply_messages',
|
||||
'contacts_reset', 'dialog_pinned', 'pinned_dialogs', 'pinned_messages', 'dialog_unread_mark',
|
||||
'peer_settings', 'peer_story_blocked', 'user_phone', 'user_emoji_status', 'privacy', 'delete_messages',
|
||||
'dialog_filter', 'dialog_filter_order', 'dialog_filters', 'folder_peers',
|
||||
'channel_available_messages', 'channel_view_forum_as_messages', 'channel_state',
|
||||
'saved_dialog_pinned', 'pinned_saved_dialogs', 'story', 'read_stories',
|
||||
'sent_story_reaction', 'new_story_reaction', 'noop',
|
||||
'read_channel_discussion_inbox', 'read_channel_discussion_outbox'
|
||||
]::text[])
|
||||
);
|
||||
-- Reserved development migration version.
|
||||
-- account privacy is authoritative absolute state: updatePrivacy has no
|
||||
-- pts/pts_count, so this migration must not add a privacy event type or payload
|
||||
-- table. The earlier development-only definition was corrected in place
|
||||
-- because no user/production database can contain that unpublished shape.
|
||||
|
|
|
|||
|
|
@ -1,14 +1,5 @@
|
|||
-- Preserve account pts continuity if this development migration is reversed:
|
||||
-- a profile refresh is absolute state, so replacing it with noop is safer than
|
||||
-- deleting business history and leaving a permanent difference gap.
|
||||
UPDATE public.user_update_events
|
||||
SET event_type = 'noop', peer_type = NULL, peer_id = NULL
|
||||
WHERE event_type = 'user_profile';
|
||||
|
||||
UPDATE public.dispatch_outbox
|
||||
SET event_type = 'noop'
|
||||
WHERE event_type = 'user_profile';
|
||||
|
||||
-- The corrected up migration does not add schema, payloads or event types.
|
||||
-- Keep the constraint normalized to the same non-moderation event set.
|
||||
ALTER TABLE public.user_update_events DROP CONSTRAINT IF EXISTS user_update_events_type_check;
|
||||
ALTER TABLE public.user_update_events ADD CONSTRAINT user_update_events_type_check CHECK (
|
||||
(event_type)::text = ANY (ARRAY[
|
||||
|
|
@ -16,7 +7,7 @@ ALTER TABLE public.user_update_events ADD CONSTRAINT user_update_events_type_che
|
|||
'edit_message', 'web_page', 'message_reactions', 'message_poll', 'draft_message', 'quick_replies',
|
||||
'new_quick_reply', 'delete_quick_reply', 'quick_reply_message', 'delete_quick_reply_messages',
|
||||
'contacts_reset', 'dialog_pinned', 'pinned_dialogs', 'pinned_messages', 'dialog_unread_mark',
|
||||
'peer_settings', 'peer_story_blocked', 'user_phone', 'user_emoji_status', 'privacy', 'delete_messages',
|
||||
'peer_settings', 'peer_story_blocked', 'user_phone', 'user_emoji_status', 'delete_messages',
|
||||
'dialog_filter', 'dialog_filter_order', 'dialog_filters', 'folder_peers',
|
||||
'channel_available_messages', 'channel_view_forum_as_messages', 'channel_state',
|
||||
'saved_dialog_pinned', 'pinned_saved_dialogs', 'story', 'read_stories',
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
-- SCAM/FAKE is viewer-visible absolute profile state. Each affected direct
|
||||
-- contact/dialog viewer receives a durable account-pts refresh so online
|
||||
-- outbox delivery and offline getDifference converge even when TDesktop keeps
|
||||
-- its local contact/dialog cache across restarts.
|
||||
-- Reserved development migration version.
|
||||
-- SCAM/FAKE is authoritative peer profile state. updateUser/updateChannel have
|
||||
-- no pts/pts_count, so this migration must not admit a moderation-only account
|
||||
-- PTS event type. The earlier development definition was corrected in place
|
||||
-- because no user/production database can contain that unpublished shape.
|
||||
ALTER TABLE public.user_update_events DROP CONSTRAINT IF EXISTS user_update_events_type_check;
|
||||
ALTER TABLE public.user_update_events ADD CONSTRAINT user_update_events_type_check CHECK (
|
||||
(event_type)::text = ANY (ARRAY[
|
||||
|
|
@ -9,7 +10,7 @@ ALTER TABLE public.user_update_events ADD CONSTRAINT user_update_events_type_che
|
|||
'edit_message', 'web_page', 'message_reactions', 'message_poll', 'draft_message', 'quick_replies',
|
||||
'new_quick_reply', 'delete_quick_reply', 'quick_reply_message', 'delete_quick_reply_messages',
|
||||
'contacts_reset', 'dialog_pinned', 'pinned_dialogs', 'pinned_messages', 'dialog_unread_mark',
|
||||
'peer_settings', 'peer_story_blocked', 'user_phone', 'user_emoji_status', 'user_profile', 'privacy',
|
||||
'peer_settings', 'peer_story_blocked', 'user_phone', 'user_emoji_status',
|
||||
'delete_messages', 'dialog_filter', 'dialog_filter_order', 'dialog_filters', 'folder_peers',
|
||||
'channel_available_messages', 'channel_view_forum_as_messages', 'channel_state',
|
||||
'saved_dialog_pinned', 'pinned_saved_dialogs', 'story', 'read_stories',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue