Criei um formulário como um plugin que pesquisa um usuário a partir de um campo de usuário que defini independentemente.
Usei a Web API para armazenar informações do usuário em um banco de dados externo (AWS DynamoDB) e extrair dados dele para pesquisa.
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
O código acima obtém todos os usuários quando a página é aberta e os passa para o Angular.
Isso funciona bem, mas a resposta leva 3500 milissegundos, o que não é muito desejável. (cerca de 1400 usuários pesquisados).
Acho que o problema é que estou fazendo User.find(user_data[‘UserID’]) em um loop, mas não consigo pensar em uma maneira de melhorar isso.
Gostaria de exibir cartões de usuário, então acho que é necessário adquirir usuários no Ruby, mas ficaria feliz em receber sugestões sobre como torná-lo mais rápido.