Итак, представьте пост с тремя разными упоминаниями групп. Он редактируется, и добавляется четвертое упоминание.
При сохранении правки мы можем использовать такой запрос, чтобы получить текущий список упоминаний групп для этого поста:
-- [params]
-- text :post_id
select gm.group_id, g.name
from group_mentions gm
join groups g on (gm.group_id = g.id)
where post_id = :post_id
Затем, сравнивая результаты запроса со списком групп, упомянутых в посте, мы можем найти новое упоминание (или новые упоминания).
Это не кажется слишком сложной вычислительной задачей, но, возможно, я упускаю что-то очевидное. Также это выглядит как задача, которую можно выполнять в фоновом режиме.
Что касается JIT-баннера об уведомлении группы (групп), то, возможно, эту логику можно было бы вынести в отдельный API-эндпоинт (/post/<id>/mentions.json) для асинхронного получения этих данных.