95 lines
2.3 KiB
PL/PgSQL
95 lines
2.3 KiB
PL/PgSQL
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);
|