From b844b188ce5f333ea89f57162b390fd6a8b3a6ed Mon Sep 17 00:00:00 2001 From: Dung Bui Date: Tue, 26 Dec 2023 22:55:32 +0700 Subject: [PATCH] fix enterprise roles page performance --- .../admin/enterprise_roles_controller.rb | 5 +- app/queries/admin/enterprise_roles_query.rb | 47 +++++++++++++++++++ .../admin/enterprise_roles/_data.html.haml | 7 ++- 3 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 app/queries/admin/enterprise_roles_query.rb diff --git a/app/controllers/admin/enterprise_roles_controller.rb b/app/controllers/admin/enterprise_roles_controller.rb index 79a52d8b41..4c0aeffc86 100644 --- a/app/controllers/admin/enterprise_roles_controller.rb +++ b/app/controllers/admin/enterprise_roles_controller.rb @@ -3,9 +3,8 @@ module Admin class EnterpriseRolesController < Admin::ResourceController def index - @enterprise_roles = EnterpriseRole.by_user_email - @users = Spree::User.order('spree_users.email') - @my_enterprises = @all_enterprises = Enterprise.by_name + @enterprise_roles, @users, @all_enterprises = Admin::EnterpriseRolesQuery.query + @my_enterprises = @all_enterprises end def create diff --git a/app/queries/admin/enterprise_roles_query.rb b/app/queries/admin/enterprise_roles_query.rb new file mode 100644 index 0000000000..6cd1f53c2d --- /dev/null +++ b/app/queries/admin/enterprise_roles_query.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module Admin + class EnterpriseRolesQuery + EnterpriseRoleStruct = Struct.new(:id, :user_id, :enterprise_id, :user_, :enterprise_name) + UserStruct = Struct.new(:id, :email) + EnterpriseStruct = Struct.new(:id, :name) + + class << self + def query + enterprise_roles = query_enterprice_roles + users = query_users + enterprises = query_enterprises + + [enterprise_roles, users, enterprises] + end + + private + + def query_enterprice_roles + EnterpriseRole.joins(:user, :enterprise).order('spree_users.email ASC'). + pluck(:id, :user_id, :enterprise_id, 'spree_users.email', 'enterprises.name'). + map do |data| + id, user_id, enterprise_id, user_email, enterprise_name = data + + { id:, user_id:, enterprise_id:, user_email:, enterprise_name: } + end + end + + def query_users + Spree::User.order(:email).pluck(:id, :email).map do |data| + id, email = data + + { id:, email: } + end + end + + def query_enterprises + Enterprise.order(:name).pluck(:id, :name).map do |data| + id, name = data + + { id:, name: } + end + end + end + end +end diff --git a/app/views/admin/enterprise_roles/_data.html.haml b/app/views/admin/enterprise_roles/_data.html.haml index d24fb584a7..a1b6b3472e 100644 --- a/app/views/admin/enterprise_roles/_data.html.haml +++ b/app/views/admin/enterprise_roles/_data.html.haml @@ -1,4 +1,3 @@ -= admin_inject_enterprise_roles(@enterprise_roles) -= admin_inject_users(@users) -= admin_inject_enterprises(@my_enterprises, @all_enterprises) - += admin_inject_json('ofn.admin', 'enterpriseRoles', @enterprise_roles) += admin_inject_json('ofn.admin', 'users', @users) += admin_inject_json('ofn.admin', 'my_enterprises', @my_enterprises) + admin_inject_json('ofn.admin', 'all_enterprises', @all_enterprises)