너무 복잡한 걸 만들고 싶진 않습니다.
이와 관련된 코드를 몇 가지 살펴봤는데(@tshenry 님, 링크 감사합니다), 그렇게까지 복잡할 필요는 없어 보입니다.
현재 그룹 멘션은 여기(L78-80)에서 트리거되고 있습니다. expand_group_mentions() 함수는 그룹 멘션 알림을 받아야 할 사용자를 출력하는 생성기(generator) 역할을 하며(SiteSetting.max_users_notified_per_group_mention와 같은 정책을 준수하면서) 수행됩니다.
이곳이 해당 로직을 넣기에 자연스러운 위치로 보입니다.
create_notification 함수에서 이미 동일한 유형의 알림을 받은 사용자에게는 알림을 억제(suppress)합니다. 이것이 그룹 멘션이 포함된 게시물을 편집할 때 새로운 그룹 멤버에게 알림이 트리거되는 이유입니다. 실제로는 그룹 내 모든 사용자에게 알림이 생성되지만, 이미 알림을 받은 사람들에게는 억제되는 것입니다.
저는 expand_group_mentions() 함수를 업데이트하여 group_mentions 테이블에 기록이 있는 그룹도 필터링하도록 하는 유사한 방식을 제안합니다.
다음과 같은 형태일 것입니다(루비 문법에 대한 제 무지를 양해해 주세요)
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
# 이미 멘션된 그룹에 대한 체크 추가
next if GroupMentions().where(group_id: group.id, post_id: post.id).length > 0
yield group, group.users
end
end
다만 이는 JIT 경고에는 아무런 영향을 주지 않습니다.
해결을 돕고자 하는 것인데, 제가 너무 시끄럽게 굴고 있는 건 아닌지 알려주세요… ![]()