Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/finders/metrics/users_starred_dashboards_finder.rb')
-rw-r--r--app/finders/metrics/users_starred_dashboards_finder.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/finders/metrics/users_starred_dashboards_finder.rb b/app/finders/metrics/users_starred_dashboards_finder.rb
new file mode 100644
index 00000000000..7244c51f9a7
--- /dev/null
+++ b/app/finders/metrics/users_starred_dashboards_finder.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module Metrics
+ class UsersStarredDashboardsFinder
+ def initialize(user:, project:, params: {})
+ @user, @project, @params = user, project, params
+ end
+
+ def execute
+ return ::Metrics::UsersStarredDashboard.none unless Ability.allowed?(user, :read_metrics_user_starred_dashboard, project)
+
+ items = starred_dashboards
+ items = by_project(items)
+ by_dashboard(items)
+ end
+
+ private
+
+ attr_reader :user, :project, :params
+
+ def by_project(items)
+ items.for_project(project)
+ end
+
+ def by_dashboard(items)
+ return items unless params[:dashboard_path]
+
+ items.merge(starred_dashboards.for_project_dashboard(project, params[:dashboard_path]))
+ end
+
+ def starred_dashboards
+ @starred_dashboards ||= user.metrics_users_starred_dashboards
+ end
+ end
+end