From 97e9129056424ce079bd2fcf875e5f2b554de317 Mon Sep 17 00:00:00 2001 From: Andrej Date: Thu, 24 Oct 2024 15:45:29 +0200 Subject: [PATCH] Improve activities loading speed [SCI-11178] --- app/models/experiment.rb | 5 ++--- app/models/my_module.rb | 5 ++--- app/models/protocol.rb | 3 +-- app/services/activities_service.rb | 10 +++++----- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/app/models/experiment.rb b/app/models/experiment.rb index 57a1a820ce..39b418ca12 100644 --- a/app/models/experiment.rb +++ b/app/models/experiment.rb @@ -69,8 +69,7 @@ def self.search( ) teams = options[:teams] || current_team || user.teams.select(:id) - new_query = distinct.with_granted_permissions(user, ExperimentPermissions::READ) - .where(user_assignments: { team: teams }) + new_query = distinct.viewable_by_user(user, teams) .where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options) new_query = new_query.joins(:project).active.where(projects: { archived: false }) unless include_archived @@ -80,7 +79,7 @@ def self.search( def self.viewable_by_user(user, teams) with_granted_permissions(user, ExperimentPermissions::READ) - .where(project: Project.viewable_by_user(user, teams)) + .where(user_assignments: { team: teams }) end def self.with_children_viewable_by_user(user) diff --git a/app/models/my_module.rb b/app/models/my_module.rb index 5ded2c691d..5b289d9172 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -116,8 +116,7 @@ def self.search( teams = options[:teams] || current_team || user.teams.select(:id) new_query = distinct.left_joins(:task_comments, my_module_tags: :tag, user_my_modules: :user) - .with_granted_permissions(user, MyModulePermissions::READ) - .where(user_assignments: { team: teams }) + .viewable_by_user(user, teams) .where_attributes_like_boolean(SEARCHABLE_ATTRIBUTES, query, options) unless include_archived @@ -130,7 +129,7 @@ def self.search( def self.viewable_by_user(user, teams) with_granted_permissions(user, MyModulePermissions::READ) - .where(experiment: Experiment.viewable_by_user(user, teams)) + .where(user_assignments: { team: teams }) end def self.filter_by_teams(teams = []) diff --git a/app/models/protocol.rb b/app/models/protocol.rb index 4c2964dc9e..7654e6f6e2 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -238,8 +238,7 @@ def self.viewable_by_user(user, teams, options = {}) def self.viewable_by_user_my_module_protocols(user, teams) distinct.joins(:my_module) - .where(my_modules: MyModule.with_granted_permissions(user, MyModulePermissions::READ) - .where(user_assignments: { team: teams })) + .where(my_modules: MyModule.viewable_by_user(user, teams)) end def self.filter_by_teams(teams = []) diff --git a/app/services/activities_service.rb b/app/services/activities_service.rb index c39a007901..585f94af2e 100644 --- a/app/services/activities_service.rb +++ b/app/services/activities_service.rb @@ -3,13 +3,13 @@ class ActivitiesService def self.load_activities(user, teams, filters = {}) # Create condition for view permissions checking first - visible_teams = user.teams.where(id: teams) - visible_projects = Project.viewable_by_user(user, visible_teams) + teams = user.teams.where(id: teams).pluck(:id) + visible_projects = Project.viewable_by_user(user, teams) visible_my_modules = MyModule.viewable_by_user(user, teams) # Temporary solution until handling of deleted subjects is fully implemented - visible_repository_teams = visible_teams.with_user_permission(user, RepositoryPermissions::READ) - visible_by_teams = Activity.where(project: nil, team_id: visible_teams.select(:id)) + visible_repository_teams = user.teams.where(id: teams).with_user_permission(user, RepositoryPermissions::READ) + visible_by_teams = Activity.where(project: nil, team_id: teams) .where.not(subject_type: %w(RepositoryBase RepositoryRow Protocol)) .order(created_at: :desc) visible_by_repositories = Activity.where(subject_type: %w(RepositoryBase RepositoryRow), team_id: visible_repository_teams.select(:id)) @@ -19,7 +19,7 @@ def self.load_activities(user, teams, filters = {}) .order(created_at: :desc) visible_by_experiments = Activity.where(subject_type: 'Experiment') - .where(subject_id: Experiment.viewable_by_user(user, visible_teams)) + .where(subject_id: Experiment.viewable_by_user(user, teams)) .order(created_at: :desc) visible_by_my_modules = Activity.where("subject_id IN (?) AND subject_type = 'MyModule' OR " \