He creado un formulario como un plugin que busca un usuario a partir de un campo de usuario que he definido de forma independiente.
Utilicé la API web para almacenar información del usuario en una base de datos externa (AWS DynamoDB) y extraer datos de ella para la búsqueda.
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
El código anterior obtiene todos los usuarios cuando se abre la página y los pasa a Angular.
Esto funciona bien, pero la respuesta tarda 3500 milisegundos, lo cual no es muy deseable. (aproximadamente 1400 usuarios buscados).
Creo que el problema es que estoy haciendo User.find(user_data[‘UserID’]) en un bucle, pero no se me ocurre una forma de mejorarlo.
Me gustaría mostrar tarjetas de usuario, por lo que creo que es necesario adquirir usuarios en Ruby, pero agradecería sugerencias sobre cómo hacerlo más rápido.