diff --git a/app/serializers/topic_view_serializer.rb b/app/serializers/topic_view_serializer.rb index a109ff34a..a616c4a1b 100644 --- a/app/serializers/topic_view_serializer.rb +++ b/app/serializers/topic_view_serializer.rb @@ -66,14 +66,17 @@ class TopicViewSerializer < ApplicationSerializer } if object.topic.private_message? - result[:allowed_users] = object.topic.allowed_users.map do |user| - BasicUserSerializer.new(user, scope: scope, root: false) - end - end + allowed_user_ids = Set.new - if object.topic.private_message? - result[:allowed_groups] = object.topic.allowed_groups.map do |ag| - BasicGroupSerializer.new(ag, scope: scope, root: false) + result[:allowed_groups] = object.topic.allowed_groups.map do |group| + allowed_user_ids.merge(GroupUser.where(group: group).pluck(:user_id)) + BasicGroupSerializer.new(group, scope: scope, root: false) + end + + result[:allowed_users] = object.topic.allowed_users.select do |user| + !allowed_user_ids.include?(user.id) + end.map do |user| + BasicUserSerializer.new(user, scope: scope, root: false) end end @@ -83,7 +86,6 @@ class TopicViewSerializer < ApplicationSerializer end end - if object.suggested_topics.try(:topics).present? result[:suggested_topics] = object.suggested_topics.topics.map do |user| SuggestedTopicSerializer.new(user, scope: scope, root: false)