owpengram-server/deploy/migrations/0013_bot_full_read_model_trigger.up.sql

25 lines
1.3 KiB
PL/PgSQL

-- bot 资料(name/about/description/commands/menu_button)变更都会 bump users.bot_info_version
-- (BumpBotInfoVersion,见 bot.sql)。群信息页的 ChannelFull.bot_info 由 RPC 层
-- channelFullBotInfoCache 缓存(键=viewer+channel,无法按 bot 定位),其跨实例失效此前只挂在
-- channel_base/channel_member 事件上——bot 自身改资料(经 BotFather 本地路径,或其它实例的
-- bots.* RPC)不会失效该缓存,导致群信息页里该 bot 的简介/命令陈旧最长 30 分钟(TTL)。
--
-- 这里给 bot 资料变更单独发一个 'bot_full' read-model 事件;ReadModelChangeListener 收到即
-- flush channelFullBotInfoCache(本地 BotFather 路径与跨实例 bots.* RPC 两条更新路径都覆盖)。
-- 与既有 user_base 事件(覆盖 RPC 投影/Redis user:base/bot 资料缓存)互补,不改动 user_base 热路径。
CREATE FUNCTION public.telesrv_notify_bot_full_read_model() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF NEW.is_bot AND (OLD.bot_info_version IS DISTINCT FROM NEW.bot_info_version) THEN
PERFORM telesrv_bump_read_model_version('bot_full', NEW.id, 'user', NEW.id);
END IF;
RETURN NULL;
END;
$$;
CREATE TRIGGER users_bot_full_read_model_changed
AFTER UPDATE ON public.users
FOR EACH ROW
EXECUTE FUNCTION public.telesrv_notify_bot_full_read_model();