現在のユーザーグループとトピックの場所に基づくトピックフィルターの作成方法

こんにちは、

投稿された場所と、トピックを表示しているユーザーが属するグループに基づいて、すべてのトピックをフィルタリングするプラグインを作成中です。このユースケースは、各国のサポートチームがそれぞれの地域から寄せられる質問に対応するためのものです。

Discourse プラグイン作成の初心者で、まだ学習中の段階です。トピックの所在地については、以下の「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 クエリの具体的な内容や、上記のコメント部分の情報を取得する方法について、ご提案があれば教えてください。

自分の質問を更新する権限がないため、ここに投稿します。更新:

ブラウザ側の JavaScript からサーバー側で実行されているコードへ現在のユーザーをどう渡すかについて迷っています。これについて説明するガイドがあるはずですが、まだ見つけることができていません :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