112 lines
5.2 KiB
PL/PgSQL
112 lines
5.2 KiB
PL/PgSQL
CREATE OR REPLACE FUNCTION public.telesrv_notify_user_base_read_model() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
changed_id BIGINT;
|
|
projection_changed BOOLEAN;
|
|
BEGIN
|
|
IF TG_OP = 'DELETE' THEN
|
|
changed_id := OLD.id;
|
|
projection_changed := true;
|
|
ELSE
|
|
changed_id := NEW.id;
|
|
IF TG_OP = 'INSERT' THEN
|
|
projection_changed := true;
|
|
ELSE
|
|
projection_changed :=
|
|
OLD.access_hash IS DISTINCT FROM NEW.access_hash OR
|
|
OLD.phone IS DISTINCT FROM NEW.phone OR
|
|
OLD.first_name IS DISTINCT FROM NEW.first_name OR
|
|
OLD.last_name IS DISTINCT FROM NEW.last_name OR
|
|
OLD.username IS DISTINCT FROM NEW.username OR
|
|
OLD.country_code IS DISTINCT FROM NEW.country_code OR
|
|
OLD.verified IS DISTINCT FROM NEW.verified OR
|
|
OLD.support IS DISTINCT FROM NEW.support OR
|
|
OLD.about IS DISTINCT FROM NEW.about OR
|
|
OLD.default_history_ttl_period IS DISTINCT FROM NEW.default_history_ttl_period OR
|
|
OLD.is_bot IS DISTINCT FROM NEW.is_bot OR
|
|
OLD.bot_info_version IS DISTINCT FROM NEW.bot_info_version OR
|
|
OLD.premium_expires_at IS DISTINCT FROM NEW.premium_expires_at OR
|
|
OLD.emoji_status_document_id IS DISTINCT FROM NEW.emoji_status_document_id OR
|
|
OLD.emoji_status_until IS DISTINCT FROM NEW.emoji_status_until OR
|
|
OLD.color_set IS DISTINCT FROM NEW.color_set OR
|
|
OLD.color IS DISTINCT FROM NEW.color OR
|
|
OLD.color_background_emoji_id IS DISTINCT FROM NEW.color_background_emoji_id OR
|
|
OLD.profile_color_set IS DISTINCT FROM NEW.profile_color_set OR
|
|
OLD.profile_color IS DISTINCT FROM NEW.profile_color OR
|
|
OLD.profile_color_background_emoji_id IS DISTINCT FROM NEW.profile_color_background_emoji_id;
|
|
END IF;
|
|
END IF;
|
|
|
|
IF projection_changed THEN
|
|
PERFORM telesrv_bump_read_model_version('user_base', changed_id, 'user', changed_id);
|
|
IF TG_OP = 'INSERT' THEN
|
|
PERFORM telesrv_bump_read_model_version('contact_account', changed_id, 'user', changed_id);
|
|
END IF;
|
|
PERFORM telesrv_bump_read_model_version('contact_account', c.user_id, 'user', c.user_id)
|
|
FROM contacts c
|
|
WHERE c.contact_user_id = changed_id;
|
|
PERFORM telesrv_bump_private_dialog_light_for_user(changed_id);
|
|
END IF;
|
|
RETURN NULL;
|
|
END;
|
|
$$;
|
|
|
|
CREATE OR REPLACE FUNCTION public.telesrv_notify_user_channel_participants_read_model() RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
changed_id BIGINT;
|
|
old_id BIGINT;
|
|
projection_changed BOOLEAN;
|
|
BEGIN
|
|
IF TG_OP = 'DELETE' THEN
|
|
changed_id := OLD.id;
|
|
projection_changed := true;
|
|
ELSE
|
|
changed_id := NEW.id;
|
|
IF TG_OP = 'INSERT' THEN
|
|
projection_changed := true;
|
|
PERFORM telesrv_bump_read_model_version('contact_account', changed_id, 'user', changed_id);
|
|
ELSE
|
|
old_id := OLD.id;
|
|
projection_changed :=
|
|
OLD.access_hash IS DISTINCT FROM NEW.access_hash OR
|
|
OLD.phone IS DISTINCT FROM NEW.phone OR
|
|
OLD.first_name IS DISTINCT FROM NEW.first_name OR
|
|
OLD.last_name IS DISTINCT FROM NEW.last_name OR
|
|
OLD.username IS DISTINCT FROM NEW.username OR
|
|
OLD.country_code IS DISTINCT FROM NEW.country_code OR
|
|
OLD.verified IS DISTINCT FROM NEW.verified OR
|
|
OLD.support IS DISTINCT FROM NEW.support OR
|
|
OLD.about IS DISTINCT FROM NEW.about OR
|
|
OLD.default_history_ttl_period IS DISTINCT FROM NEW.default_history_ttl_period OR
|
|
OLD.is_bot IS DISTINCT FROM NEW.is_bot OR
|
|
OLD.bot_info_version IS DISTINCT FROM NEW.bot_info_version OR
|
|
OLD.premium_expires_at IS DISTINCT FROM NEW.premium_expires_at OR
|
|
OLD.emoji_status_document_id IS DISTINCT FROM NEW.emoji_status_document_id OR
|
|
OLD.emoji_status_until IS DISTINCT FROM NEW.emoji_status_until OR
|
|
OLD.color_set IS DISTINCT FROM NEW.color_set OR
|
|
OLD.color IS DISTINCT FROM NEW.color OR
|
|
OLD.color_background_emoji_id IS DISTINCT FROM NEW.color_background_emoji_id OR
|
|
OLD.profile_color_set IS DISTINCT FROM NEW.profile_color_set OR
|
|
OLD.profile_color IS DISTINCT FROM NEW.profile_color OR
|
|
OLD.profile_color_background_emoji_id IS DISTINCT FROM NEW.profile_color_background_emoji_id;
|
|
IF old_id IS DISTINCT FROM changed_id THEN
|
|
PERFORM telesrv_bump_channel_participants_for_user(old_id);
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
|
|
IF projection_changed THEN
|
|
PERFORM telesrv_bump_channel_participants_for_user(changed_id);
|
|
END IF;
|
|
RETURN NULL;
|
|
END;
|
|
$$;
|
|
|
|
DROP TRIGGER IF EXISTS users_release_collectible_phone_on_soft_delete ON public.users;
|
|
CREATE TRIGGER users_release_collectible_phone_on_soft_delete
|
|
BEFORE UPDATE OF deleted_at ON public.users
|
|
FOR EACH ROW WHEN (OLD.deleted_at IS NULL AND NEW.deleted_at IS NOT NULL)
|
|
EXECUTE FUNCTION public.release_soft_deleted_user_collectible_phone();
|