diff options
Diffstat (limited to 'app/controllers/profiles/notifications_controller.rb')
-rw-r--r-- | app/controllers/profiles/notifications_controller.rb | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/app/controllers/profiles/notifications_controller.rb b/app/controllers/profiles/notifications_controller.rb index 0a73239709a..6ef0ed6d365 100644 --- a/app/controllers/profiles/notifications_controller.rb +++ b/app/controllers/profiles/notifications_controller.rb @@ -3,18 +3,13 @@ class Profiles::NotificationsController < Profiles::ApplicationController feature_category :users - # rubocop: disable CodeReuse/ActiveRecord def show @user = current_user @user_groups = user_groups @group_notifications = UserGroupNotificationSettingsFinder.new(current_user, user_groups).execute - - @project_notifications = current_user.notification_settings.for_projects.order(:id) - .preload_source_route - .select { |notification| current_user.can?(:read_project, notification.source) } + @project_notifications = project_notifications_with_preloaded_associations @global_notification_setting = current_user.global_notification_setting end - # rubocop: enable CodeReuse/ActiveRecord def update result = Users::UpdateService.new(current_user, user_params.merge(user: current_user)).execute @@ -37,4 +32,20 @@ class Profiles::NotificationsController < Profiles::ApplicationController def user_groups GroupsFinder.new(current_user, all_available: false).execute.order_name_asc.page(params[:page]) end + + # rubocop: disable CodeReuse/ActiveRecord + def project_notifications_with_preloaded_associations + project_notifications = current_user + .notification_settings + .for_projects + .order_by_id_asc + .preload_source_route + + projects = project_notifications.map(&:source) + ActiveRecord::Associations::Preloader.new.preload(projects, { namespace: [:route, :owner], group: [] }) + Preloaders::UserMaxAccessLevelInProjectsPreloader.new(projects, current_user).execute + + project_notifications.select { |notification| current_user.can?(:read_project, notification.source) } + end + # rubocop: enable CodeReuse/ActiveRecord end |