Cómo crear un filtro de temas basado en el grupo de usuario actual y la ubicación del tema

Hola,

Estoy trabajando en un plugin que filtra todos los temas según el lugar donde se publicó el tema y el grupo al que pertenece el usuario que lo visualiza. El caso de uso aquí es tener un equipo de soporte en diferentes países que atienda las preguntas provenientes de sus propias ubicaciones.

Soy un creador de plugins de Discourse principiante y aún estoy aprendiendo cómo hacerlo. La ubicación del tema se manejará mediante el plugin de ubicaciones disponible aquí: Locations Plugin 🌍

Y agregaré a los usuarios que necesiten esta vista filtrada a un grupo con un nombre como NA_queue o EU_queue.

El plugin verificará si el usuario ha iniciado sesión y si se ha establecido su grupo principal. Si es así, filtrará todos los temas para que coincidan con la cola a la que pertenece el usuario actual.

Pienso que esto podría hacerse con algo similar al siguiente código:
after_initialize do
require_dependency ‘topic_query’

  # Si el usuario ha iniciado sesión y tiene un grupo principal establecido

  # Necesito obtener el grupo principal del usuario
  # Necesito obtener la ubicación del tema

  TopicQuery.add_custom_filter(:location) do |results, topic_query|
    filter = "ALGUNA CONSULTA SQL AQUÍ"
    results = results.joins("{filter}")

    results
  end

¿Es este un buen enfoque para mi problema?
Además, ¿alguien tiene sugerencias sobre cómo sería la consulta SQL o cómo obtener esas dos piezas de información comentadas?

No tengo permisos para actualizar mi pregunta, así que simplemente publicaré esto aquí. Actualización:

Me estoy enredando en cómo pasar el usuario actual desde el JavaScript del lado del cliente a mi código que se ejecuta en el lado del servidor. Probablemente haya una guía por ahí que explique esto, pero aún no la he encontrado :frowning:

El siguiente código funciona muy bien como filtro en la ubicación de la publicación:

after_initialize do

  # Obtiene el usuario actual pasado de alguna manera desde el lado del cliente
  def self.filter_on_user

    require_dependency 'topic_query'

    # Si el usuario actual tiene un grupo principal, establece el código de país
    # por ahora, asumamos que el código de país es US para Estados Unidos
    countrycode = "us"

    # Filtra por ese código de país para todas las consultas de temas en el sitio para ese usuario.
    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