Eu não quero tornar nada muito complexo.
Estava examinando parte do código disso (obrigado @tshenry pelo link), e não parece que precise ser tão complicado.
As menções a grupos estão sendo acionadas aqui (linhas 78-80). A função expand_group_mentions() é um gerador responsável por gerar os usuários que devem receber notificações de menção a grupos (respeitando políticas como SiteSetting.max_users_notified_per_group_mention).
Isso parece ser o local natural para colocar essa lógica.
Na função create_notification, suprimimos notificações para qualquer pessoa que já tenha recebido uma notificação do mesmo tipo. É por isso que editar uma postagem com uma menção a grupo aciona uma notificação para novos membros do grupo — uma notificação é realmente gerada para todos os usuários do grupo, mas é então suprimida para pessoas que já receberam a notificação.
Estou sugerindo algo semelhante, atualizando a função expand_group_mentions() para também filtrar grupos que já possuem um registro na tabela group_mentions.
Algo assim (por favor, desculpe minha falta de conhecimento sobre a sintaxe do Ruby)
def expand_group_mentions(groups, post)
return unless post.user && groups
Group.mentionable(post.user, include_public: false).where(id: groups.map(&:id)).each do |group|
next if group.user_count >= SiteSetting.max_users_notified_per_group_mention
# Adicionar verificação para grupos já mencionados
next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0
yield group, group.users
end
end
Isso não resolve o aviso JIT, porém.
Tentando ajudar a resolver isso, me avise se eu estiver apenas sendo chato… ![]()