From c3e96c4a55796e21fa2775a574c1699e107a1acd Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Tue, 28 Apr 2015 22:02:03 +0200 Subject: [PATCH] v3: use query object for include logic to avoid n+1 queries --- lib/travis/api/v3/query.rb | 3 ++- lib/travis/api/v3/renderer/model_renderer.rb | 4 ++++ lib/travis/api/v3/renderer/owner.rb | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/travis/api/v3/query.rb b/lib/travis/api/v3/query.rb index 2c45d993..6cf049ab 100644 --- a/lib/travis/api/v3/query.rb +++ b/lib/travis/api/v3/query.rb @@ -26,9 +26,10 @@ module Travis::API::V3 attr_reader :params, :main_type - def initialize(params, main_type) + def initialize(params, main_type, includes = nil) @params = params @main_type = main_type.to_s + @includes = includes end def perform_async(identifier, *args) diff --git a/lib/travis/api/v3/renderer/model_renderer.rb b/lib/travis/api/v3/renderer/model_renderer.rb index aa9879cd..491aa627 100644 --- a/lib/travis/api/v3/renderer/model_renderer.rb +++ b/lib/travis/api/v3/renderer/model_renderer.rb @@ -57,6 +57,10 @@ module Travis::API::V3 include.include?(field) end + def query(type) + Queries[type].new({}, type, includes: include) + end + def render(representation) if included.include? model return REDUNDANT unless href diff --git a/lib/travis/api/v3/renderer/owner.rb b/lib/travis/api/v3/renderer/owner.rb index ead5edc0..d4cbd344 100644 --- a/lib/travis/api/v3/renderer/owner.rb +++ b/lib/travis/api/v3/renderer/owner.rb @@ -17,7 +17,8 @@ module Travis::API::V3 end def repositories - access_control.visible_repositories(@model.repositories) + repositories = query(:repositories).for_owner(@model) + access_control.visible_repositories(repositories) end end end