Ho creato un form come plugin che cerca un utente da un campo utente che ho definito in modo indipendente.
Ho utilizzato la Web API per memorizzare le informazioni dell’utente in un database esterno (AWS DynamoDB) ed estrarre i dati da esso per la ricerca.
class DiscourseUserSearchController < ApplicationController
def index
end
def search
dynamodb = Aws::DynamoDB::Client.new(
access_key_id: ENV['ACCESS_KEY_ID'],
secret_access_key: ENV['SECRET_ACCESS_KEY'],
region: AWS_REGION
)
scan_condition = {
table_name: "DiscourseUserInformation"
}
result = dynamodb.scan(scan_condition)
result = result.items
Rails.logger.info result
data = result.map do |user_data|
user = User.find(user_data['UserID'])
user_data['avatar_template'] = user.avatar_template
user_data['username'] = user.username
next user_data
end
render status: 200, json: { status: 200, data: data }
end
end
Il codice sopra recupera tutti gli utenti quando la pagina viene aperta e li passa ad Angular.
Questo funziona bene, ma la risposta richiede 3500 millisecondi, il che non è molto desiderabile. (circa 1400 utenti cercati).
Penso che il problema sia che sto eseguendo User.find(user_data[‘UserID’]) in un ciclo, ma non riesco a trovare un modo per migliorarlo.
Vorrei visualizzare le schede utente, quindi penso che sia necessario acquisire gli utenti su Ruby, ma sarei felice di ricevere suggerimenti su come renderlo più veloce.