diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2019-10-25 12:27:22 +0200 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2019-10-25 15:45:09 +0200 |
commit | 4189f977103395ba1bef48f82388d208d0d4e0ab (patch) | |
tree | 4ba0203de6ed309d99e76f40df3d662de44f7506 | |
parent | 9304505c8eea64474c1a9da669be107ea43af1f7 (diff) | |
download | gitlab-ce-epic-issues-loading.tar.gz |
Minor fixes and cleanupsepic-issues-loading
* Moved query to epic model
* method renaming
-rw-r--r-- | ee/app/models/ee/epic.rb | 16 | ||||
-rw-r--r-- | ee/lib/gitlab/graphql/loaders/batch_epic_issues_loader.rb | 14 | ||||
-rw-r--r-- | lib/gitlab/graphql/authorize/authorize_array.rb | 15 | ||||
-rw-r--r-- | lib/gitlab/graphql/connections.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/graphql/connections/authorize_array_connection.rb | 17 | ||||
-rw-r--r-- | lib/gitlab/graphql/connections/filterable_array_connection.rb | 16 | ||||
-rw-r--r-- | lib/gitlab/graphql/filterable_array.rb | 13 |
7 files changed, 46 insertions, 49 deletions
diff --git a/ee/app/models/ee/epic.rb b/ee/app/models/ee/epic.rb index f61c8b18779..94fa7574121 100644 --- a/ee/app/models/ee/epic.rb +++ b/ee/app/models/ee/epic.rb @@ -191,6 +191,14 @@ module EE ) end + def related_issues(ids:, preload: nil) + ::Issue.select('issues.*, epic_issues.id as epic_issue_id, epic_issues.relative_position, epic_issues.epic_id as epic_id') + .joins(:epic_issue) + .preload(preload) + .where("epic_issues.epic_id": ids) + .order('epic_issues.relative_position, epic_issues.id') + end + private def start_date_milestone_query @@ -330,12 +338,8 @@ module EE end def issues_readable_by(current_user, preload: nil) - related_issues = ::Issue.select('issues.*, epic_issues.id as epic_issue_id, epic_issues.relative_position') - .joins(:epic_issue) - .preload(preload) - .where("epic_issues.epic_id = #{id}") - .order('epic_issues.relative_position, epic_issues.id') - + related_issues = self.class.related_issues(ids: id, preload: preload) + Ability.issues_readable_by_user(related_issues, current_user) end diff --git a/ee/lib/gitlab/graphql/loaders/batch_epic_issues_loader.rb b/ee/lib/gitlab/graphql/loaders/batch_epic_issues_loader.rb index c471aec8b24..7f45184cff0 100644 --- a/ee/lib/gitlab/graphql/loaders/batch_epic_issues_loader.rb +++ b/ee/lib/gitlab/graphql/loaders/batch_epic_issues_loader.rb @@ -9,17 +9,14 @@ module Gitlab @user = user end - # rubocop: disable CodeReuse/ActiveRecord def find BatchLoader::GraphQL.for(@model_id).batch(default_value: nil) do |ids, loader| - results = ::Issue.select('issues.*, epic_issues.epic_id as epic_id') - .joins(:epic_issue) - .where("epic_issues.epic_id": ids) + issues = ::Epic.related_issues(ids: ids, preload: { project: :namespace }) - results.each do |record| - loader.call(record.epic_id) do |memo| - memo ||= Gitlab::Graphql::Authorize::AuthorizeArray.new(filter_authorized) - memo << record + issues.each do |issue| + loader.call(issue.epic_id) do |memo| + memo ||= Gitlab::Graphql::FilterableArray.new(filter_authorized) + memo << issue end end end @@ -30,7 +27,6 @@ module Gitlab Ability.issues_readable_by_user(issues, @user) end end - # rubocop: enable CodeReuse/ActiveRecord end end end diff --git a/lib/gitlab/graphql/authorize/authorize_array.rb b/lib/gitlab/graphql/authorize/authorize_array.rb deleted file mode 100644 index 5fd8694334c..00000000000 --- a/lib/gitlab/graphql/authorize/authorize_array.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Graphql - module Authorize - class AuthorizeArray < Array - attr_reader :callback - - def initialize(callback) - @callback = callback - end - end - end - end -end diff --git a/lib/gitlab/graphql/connections.rb b/lib/gitlab/graphql/connections.rb index 5415e47c739..3a271dfeee6 100644 --- a/lib/gitlab/graphql/connections.rb +++ b/lib/gitlab/graphql/connections.rb @@ -9,8 +9,8 @@ module Gitlab Gitlab::Graphql::Connections::KeysetConnection ) GraphQL::Relay::BaseConnection.register_connection_implementation( - Gitlab::Graphql::Authorize::AuthorizeArray, - Gitlab::Graphql::Connections::AuthorizeArrayConnection + Gitlab::Graphql::FilterableArray, + Gitlab::Graphql::Connections::FilterableArrayConnection ) end end diff --git a/lib/gitlab/graphql/connections/authorize_array_connection.rb b/lib/gitlab/graphql/connections/authorize_array_connection.rb deleted file mode 100644 index 1b81f23f3f7..00000000000 --- a/lib/gitlab/graphql/connections/authorize_array_connection.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Graphql - module Connections - class AuthorizeArrayConnection < GraphQL::Relay::ArrayConnection - def paged_nodes - @authorized_nodes ||= begin - callback = nodes.callback - nodes = super - callback.call(nodes) - end - end - end - end - end -end diff --git a/lib/gitlab/graphql/connections/filterable_array_connection.rb b/lib/gitlab/graphql/connections/filterable_array_connection.rb new file mode 100644 index 00000000000..251bcd9343b --- /dev/null +++ b/lib/gitlab/graphql/connections/filterable_array_connection.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Gitlab + module Graphql + module Connections + class FilterableArrayConnection < GraphQL::Relay::ArrayConnection + def paged_nodes + @authorized_nodes ||= begin + callback = nodes.filter_callback + callback.call(super) + end + end + end + end + end +end diff --git a/lib/gitlab/graphql/filterable_array.rb b/lib/gitlab/graphql/filterable_array.rb new file mode 100644 index 00000000000..12cb2aa3d15 --- /dev/null +++ b/lib/gitlab/graphql/filterable_array.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Gitlab + module Graphql + class FilterableArray < Array + attr_reader :filter_callback + + def initialize(filter_callback) + @filter_callback = filter_callback + end + end + end +end |