Context
우리는 API를 통해 사용자를 그룹에 프로그래밍 방식으로 추가하고, 각 그룹에 대해 개인 메시지를 자동으로 생성하는 시스템을 갖추고 있습니다. 이 모든 작업은 API를 통해 이루어집니다.
예를 들어, cooking-class-101이라는 이름의 그룹이 있다고 가정해 보겠습니다.
이 그룹을 위해 cooking-class-101과 system을 두 참여자로 하여 개인 메시지를 생성합니다.
이 방식은 사람들을 그룹으로 묶어 개인 그룹 채팅을 자동으로 생성하는 데 매우 효과적으로 작동해 왔습니다.
The Problem
우리가 겪고 있는 문제는 일반 사용자가 그룹의 일원인 경우, 주제(topic)에 새 게시물이 추가될 때 메시지 버스(message bus)가 업데이트를 반환하지 않는다는 것입니다.
예를 들어, 주제 ID가 123인 그룹 개인 메시지가 있다고 합시다. 메시지 버스가 topic/123 채널에 구독되어 있는 것을 확인할 수 있지만, 다른 사용자가 해당 주제에 게시물을 생성해도 메시지 버스가 아무것도 반환하지 않아 최신 게시물이 자동으로 표시되지 않습니다.
메시지 버스가 일반적으로 의도대로 작동하는지 확인해 보았는데, topic/presence/123 채널에서는 데이터를 올바르게 반환하고 있습니다.
위와 반대로, 개인 메시지에 추가된 그룹의 일원인 관리자 사용자의 경우, 메시지 버스는 topic/123 채널에서 데이터를 올바르게 반환하며, 따라서 새 게시물이 주제에 실시간으로 올바르게 표시됩니다.
또한, 그룹의 일원인 일반 사용자가 주제 참여를 별도로 초대받으면(즉, 이제 cooking-class-101, system, regular-user이 참여하는 상태가 되면), 메시지 버스가 topic/123 채널에서 응답을 올바르게 받기 시작하여 새 게시물을 실시간으로 확인할 수 있게 됩니다.
Research
Discourse 코드를 살펴본 결과, 아래 링크로 이어졌는데, 개인 메시지 주제에서는 새 게시물이 게시될 때 그룹에 알림을 보내지 않는 것으로 보입니다: discourse/app/models/post.rb at b7b81afe553a79f58f79f49a6c2ceff831aa4ec7 · discourse/discourse · GitHub
위 링크의 topic.allowed_users가 그룹이 추가된 개인 메시지 주제에서 무엇을 반환해야 하는지 정확히 확신은 없지만, 제 추측으로는 그룹의 일부로 존재하는 사용자 목록이 포함되지 않는 것 같습니다.
이것을 버그로 태그했지만, 의도된 동작일 수도 있습니다?