Как создать фильтр тем на основе текущей группы пользователей и местоположения темы

Привет,

Я работаю над плагином, который фильтрует все темы в зависимости от того, откуда была опубликована тема и к какой группе относится пользователь, просматривающий эту тему. Сценарий использования здесь — наличие команды поддержки в разных странах, которая обрабатывает вопросы, поступающие из их собственных регионов.

Я новичок в создании плагинов для Discourse и всё ещё изучаю, как это делать. Расположение тем будет обрабатываться плагином Locations, который можно найти здесь: Locations Plugin 🌍.

А пользователей, которым нужен такой фильтрованный просмотр, я добавлю в группу с названием вроде NA_queue или EU_queue.

Плагин будет проверять, авторизован ли пользователь и установлена ли у него основная группа. Если да, он будет фильтровать все темы так, чтобы они соответствовали очереди, к которой принадлежит текущий пользователь.

Думаю, это можно реализовать с помощью кода, похожего на следующий:

after_initialize do
  require_dependency 'topic_query'

  # Если пользователь авторизован и у него установлена основная группа

  # Нужно получить основную группу пользователя
  # Нужно получить местоположение темы

  TopicQuery.add_custom_filter(:location) do |results, topic_query|
    filter = "ЗДЕСЬ SQL-ЗАПРОС"
    results = results.joins("{filter}")

    results
  end
end

Является ли этот подход хорошим решением моей проблемы?
Также есть ли у кого-нибудь предложения относительно того, каким должен быть SQL-запрос или как получить эти два недостающих элемента, отмеченных комментариями?

У меня нет прав для обновления моего вопроса, поэтому я просто опубликую это здесь. Обновление:

Я запутался в том, как передать текущего пользователя с клиентской стороны (JS) в код, работающий на стороне сервера. Наверное, где-то есть руководство, объясняющее это, но я пока его не нашел :frowning:

Следующий код отлично работает как фильтр по местоположению постов:
after_initialize do

# получает текущего пользователя, переданного каким-то образом с клиентской стороны
def self.filter_on_user

  require_dependency 'topic_query'

  # если у текущего пользователя есть основная группа, установите код страны
  # пока предположим, что код страны для США — US
 countrycode = "us" 

  # фильтруем по этому коду страны для всех запросов тем на сайте для этого пользователя.
  TopicQuery.add_custom_filter(:location) do |results, topic_query|

    results = results.joins("JOIN topic_custom_fields tc ON
                             topics.id = tc.topic_id AND
                             tc.name = 'location' AND
                             tc.value LIKE '%countrycode\":\"#{countrycode}%'
                             ")
 results
  end
end

filter_on_user

end