From af3087446c1fa7bfd46f2140a5079e7469bbafd5 Mon Sep 17 00:00:00 2001 From: carlad Date: Tue, 24 Nov 2015 18:03:15 +0100 Subject: [PATCH] v3 adjust repo model, query and service for filtering by starred - not working --- lib/travis/api/v3/models/repository.rb | 1 + lib/travis/api/v3/queries/repositories.rb | 29 ++++++++++--------- .../api/v3/services/repositories/for_owner.rb | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/travis/api/v3/models/repository.rb b/lib/travis/api/v3/models/repository.rb index 6bf8f4de..16b9467a 100644 --- a/lib/travis/api/v3/models/repository.rb +++ b/lib/travis/api/v3/models/repository.rb @@ -6,6 +6,7 @@ module Travis::API::V3 has_many :builds, dependent: :delete_all, order: 'builds.id DESC'.freeze has_many :permissions, dependent: :delete_all has_many :users, through: :permissions + has_many :starred_repositories, through: :users belongs_to :owner, polymorphic: true belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze diff --git a/lib/travis/api/v3/queries/repositories.rb b/lib/travis/api/v3/queries/repositories.rb index 3f0869c2..70467c3e 100644 --- a/lib/travis/api/v3/queries/repositories.rb +++ b/lib/travis/api/v3/queries/repositories.rb @@ -3,25 +3,28 @@ module Travis::API::V3 params :active, :private, :starred, prefix: :repository sortable_by :id, :github_id, :owner_name, :name, active: sort_condition(:active) - def for_member(user) - all.joins(:users).where(users: user_condition(user), invalidated_at: nil) + def for_member(user, **options) + all(user: user, **options).joins(:users).where(users: user_condition(user), invalidated_at: nil) end - def for_owner(owner) - filter(owner.repositories) + def for_owner(owner, **options) + filter(owner.repositories, **options) end - def all - @all ||= filter(Models::Repository) + def all(**options) + filter(Models::Repository, **options) end - def filter(list) - list = list.where(invalidated_at: nil) - list = list.where(active: bool(active)) unless active.nil? - list = list.where(private: bool(private)) unless private.nil? - list = list.includes(:owner) if includes? 'repository.owner'.freeze - # where the repo is starred - # list = list.where(starred: bool(Repository.joins(:starred_repository).where(starred_repository: { repository_id: 1, user_id: user.id }))) unless starred.nil? + def filter(list, user: nil) + list = list.where(invalidated_at: nil) + list = list.where(active: bool(active)) unless active.nil? + list = list.where(private: bool(private)) unless private.nil? + list = list.includes(:owner) if includes? 'repository.owner'.freeze + + if user and not starred.nil? + # user.id works + list = list.joins(:starred_repositories).where(starred_repositories: { user_id: user.id }) + end if includes? 'repository.last_build'.freeze or includes? 'build'.freeze list = list.includes(:last_build) diff --git a/lib/travis/api/v3/services/repositories/for_owner.rb b/lib/travis/api/v3/services/repositories/for_owner.rb index 264c4d4b..2577ed81 100644 --- a/lib/travis/api/v3/services/repositories/for_owner.rb +++ b/lib/travis/api/v3/services/repositories/for_owner.rb @@ -4,7 +4,7 @@ module Travis::API::V3 paginate(default_limit: 100) def run! - unfiltered = query.for_owner(find(:owner)) + unfiltered = query.for_owner(find(:owner), user: acccess_control.user) access_control.visible_repositories(unfiltered) end end