merged from gramsrv upstream

This commit is contained in:
onysd 2026-09-01 12:06:31 +03:00
parent 79c64ee916
commit 21a0856587
651 changed files with 54774 additions and 4590 deletions

View file

@ -0,0 +1,95 @@
DROP TRIGGER IF EXISTS users_dialog_owner_read_model ON public.users;
DROP FUNCTION IF EXISTS public.telesrv_seed_dialog_owner_read_model();
DELETE FROM public.read_model_versions WHERE model = 'dialog_owner';
CREATE OR REPLACE FUNCTION public.telesrv_notify_dialog_light_read_model()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
owner_id bigint;
peer_type text;
peer_id bigint;
BEGIN
IF TG_OP = 'DELETE' THEN
owner_id := OLD.user_id;
peer_type := OLD.peer_type;
peer_id := OLD.peer_id;
ELSE
owner_id := NEW.user_id;
peer_type := NEW.peer_type;
peer_id := NEW.peer_id;
END IF;
PERFORM public.telesrv_bump_dialog_light(owner_id, peer_type, peer_id);
RETURN NULL;
END;
$$;
CREATE OR REPLACE FUNCTION public.telesrv_notify_channel_dialog_light_read_model()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
owner_id bigint;
channel_id bigint;
BEGIN
IF TG_OP = 'DELETE' THEN
owner_id := OLD.user_id;
channel_id := OLD.channel_id;
ELSE
owner_id := NEW.user_id;
channel_id := NEW.channel_id;
END IF;
PERFORM public.telesrv_bump_dialog_light(owner_id, 'channel', channel_id);
RETURN NULL;
END;
$$;
CREATE OR REPLACE FUNCTION public.telesrv_notify_channel_member_read_model()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
channel_id bigint;
user_id bigint;
BEGIN
IF TG_OP = 'DELETE' THEN
channel_id := OLD.channel_id;
user_id := OLD.user_id;
ELSE
channel_id := NEW.channel_id;
user_id := NEW.user_id;
END IF;
PERFORM public.telesrv_bump_read_model_version('channel_member', user_id, 'channel', channel_id);
PERFORM public.telesrv_bump_dialog_light(user_id, 'channel', channel_id);
RETURN NULL;
END;
$$;
CREATE OR REPLACE FUNCTION public.telesrv_bump_dialog_light(
p_owner_user_id bigint,
p_peer_type text,
p_peer_id bigint
)
RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
IF COALESCE(p_owner_user_id, 0) = 0
OR COALESCE(p_peer_id, 0) = 0
OR COALESCE(p_peer_type, '') = ''
THEN
RETURN;
END IF;
PERFORM public.telesrv_bump_read_model_version(
'dialog_light', p_owner_user_id, p_peer_type, p_peer_id
);
END;
$$;
DROP FUNCTION IF EXISTS public.telesrv_bump_dialog_owner(bigint);