summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Provaznik <jprovaznik@gitlab.com>2019-10-25 12:27:22 +0200
committerJan Provaznik <jprovaznik@gitlab.com>2019-10-25 15:45:09 +0200
commit4189f977103395ba1bef48f82388d208d0d4e0ab (patch)
tree4ba0203de6ed309d99e76f40df3d662de44f7506
parent9304505c8eea64474c1a9da669be107ea43af1f7 (diff)
downloadgitlab-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.rb16
-rw-r--r--ee/lib/gitlab/graphql/loaders/batch_epic_issues_loader.rb14
-rw-r--r--lib/gitlab/graphql/authorize/authorize_array.rb15
-rw-r--r--lib/gitlab/graphql/connections.rb4
-rw-r--r--lib/gitlab/graphql/connections/authorize_array_connection.rb17
-rw-r--r--lib/gitlab/graphql/connections/filterable_array_connection.rb16
-rw-r--r--lib/gitlab/graphql/filterable_array.rb13
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