Come creare un filtro argomenti basato sul gruppo utente corrente e sulla posizione dell'argomento

Ciao,

Sto lavorando a un plugin che filtra tutti i topic in base a dove è stato pubblicato il topic e a quale gruppo appartiene l’utente che lo visualizza. Il caso d’uso qui è avere un team di supporto in diversi paesi che gestisce le domande provenienti dalle rispettive località.

Sono un nuovo creatore di plugin per Discourse e sto ancora imparando come fare. La località del topic sarà gestita dal plugin Locations disponibile qui: Locations Plugin 🌍

Aggiungerò gli utenti che devono avere questa vista filtrata a un gruppo chiamato qualcosa come NA_queue o EU_queue.

Il plugin verificherà se l’utente è loggato e se è impostato il gruppo principale. Se lo è, filtrerà tutti i topic in modo che corrispondano alla coda a cui appartiene l’utente corrente.

Penso che questo possa essere realizzato con qualcosa di simile al seguente codice:
after_initialize do
require_dependency ‘topic_query’

  # se loggato e con gruppo principale impostato

  # necessario ottenere il gruppo principale dell'utente
  # necessario ottenere la località del topic

  TopicQuery.add_custom_filter(:location) do |results, topic_query|
    filter = "ALCUNA QUERY SQL QUI"
    results = results.joins("{filter}")

    results
  end

È questo un buon approccio al mio problema?
Inoltre, qualcuno ha suggerimenti su quale dovrebbe essere la query SQL o su come ottenere le due informazioni commentate?

Non ho i permessi per aggiornare la mia domanda, quindi pubblicherò questo messaggio qui. Aggiornamento:

Mi sto perdendo nel capire come passare l’utente corrente dal lato browser (JavaScript) al codice che gira sul lato server. Probabilmente esiste una guida che spiega questo, ma non sono ancora riuscito a trovarla :frowning:

Il codice seguente funziona benissimo come filtro per la posizione dei post:

after_initialize do

# ottiene l'utente corrente passato in qualche modo dal lato client
def self.filter_on_user

  require_dependency 'topic_query'

  # se l'utente corrente ha un gruppo principale, imposta il codice paese
  # per ora, assumiamo che il codice paese sia US per gli USA
 countrycode = "us" 

  # filtra per quel codice paese su tutte le query di argomento del sito per quell'utente.
  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