Add :owned param to ProjectFinder
And use it in the API.
This commit is contained in:
parent
5654ac877d
commit
db679788e4
5 changed files with 18 additions and 9 deletions
|
@ -7,6 +7,7 @@
|
||||||
# project_ids_relation: int[] - project ids to use
|
# project_ids_relation: int[] - project ids to use
|
||||||
# params:
|
# params:
|
||||||
# trending: boolean
|
# trending: boolean
|
||||||
|
# owned: boolean
|
||||||
# non_public: boolean
|
# non_public: boolean
|
||||||
# starred: boolean
|
# starred: boolean
|
||||||
# sort: string
|
# sort: string
|
||||||
|
@ -47,8 +48,12 @@ class ProjectsFinder < UnionFinder
|
||||||
def init_collection
|
def init_collection
|
||||||
projects = []
|
projects = []
|
||||||
|
|
||||||
projects << current_user.authorized_projects if current_user
|
if params[:owned].present?
|
||||||
projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].present?
|
projects << current_user.owned_projects if current_user
|
||||||
|
else
|
||||||
|
projects << current_user.authorized_projects if current_user
|
||||||
|
projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].present?
|
||||||
|
end
|
||||||
|
|
||||||
projects
|
projects
|
||||||
end
|
end
|
||||||
|
|
|
@ -152,7 +152,7 @@ module API
|
||||||
get ":id/projects" do
|
get ":id/projects" do
|
||||||
group = find_group!(params[:id])
|
group = find_group!(params[:id])
|
||||||
projects = GroupProjectsFinder.new(group: group, current_user: current_user, params: project_finder_params).execute
|
projects = GroupProjectsFinder.new(group: group, current_user: current_user, params: project_finder_params).execute
|
||||||
projects = filter_projects(projects)
|
projects = reorder_projects(projects)
|
||||||
entity = params[:simple] ? Entities::BasicProjectDetails : Entities::Project
|
entity = params[:simple] ? Entities::BasicProjectDetails : Entities::Project
|
||||||
present paginate(projects), with: entity, current_user: current_user
|
present paginate(projects), with: entity, current_user: current_user
|
||||||
end
|
end
|
||||||
|
|
|
@ -256,16 +256,13 @@ module API
|
||||||
|
|
||||||
# project helpers
|
# project helpers
|
||||||
|
|
||||||
def filter_projects(projects)
|
def reorder_projects(projects)
|
||||||
if params[:owned]
|
|
||||||
projects = projects.merge(current_user.owned_projects)
|
|
||||||
end
|
|
||||||
|
|
||||||
projects.reorder(params[:order_by] => params[:sort])
|
projects.reorder(params[:order_by] => params[:sort])
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_finder_params
|
def project_finder_params
|
||||||
finder_params = {}
|
finder_params = {}
|
||||||
|
finder_params[:owned] = true if params[:owned].present?
|
||||||
finder_params[:non_public] = true if params[:membership].present?
|
finder_params[:non_public] = true if params[:membership].present?
|
||||||
finder_params[:starred] = true if params[:starred].present?
|
finder_params[:starred] = true if params[:starred].present?
|
||||||
finder_params[:visibility_level] = Gitlab::VisibilityLevel.level_value(params[:visibility]) if params[:visibility]
|
finder_params[:visibility_level] = Gitlab::VisibilityLevel.level_value(params[:visibility]) if params[:visibility]
|
||||||
|
|
|
@ -69,7 +69,7 @@ module API
|
||||||
|
|
||||||
def present_projects(options = {})
|
def present_projects(options = {})
|
||||||
projects = ProjectsFinder.new(current_user: current_user, params: project_finder_params).execute
|
projects = ProjectsFinder.new(current_user: current_user, params: project_finder_params).execute
|
||||||
projects = filter_projects(projects)
|
projects = reorder_projects(projects)
|
||||||
projects = projects.with_statistics if params[:statistics]
|
projects = projects.with_statistics if params[:statistics]
|
||||||
projects = projects.with_issues_enabled if params[:with_issues_enabled]
|
projects = projects.with_issues_enabled if params[:with_issues_enabled]
|
||||||
projects = projects.with_merge_requests_enabled if params[:with_merge_requests_enabled]
|
projects = projects.with_merge_requests_enabled if params[:with_merge_requests_enabled]
|
||||||
|
|
|
@ -137,6 +137,13 @@ describe ProjectsFinder do
|
||||||
it { is_expected.to eq([public_project]) }
|
it { is_expected.to eq([public_project]) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'filter by owned' do
|
||||||
|
let(:params) { { owned: true } }
|
||||||
|
let!(:owned_project) { create(:empty_project, :private, namespace: current_user.namespace) }
|
||||||
|
|
||||||
|
it { is_expected.to eq([owned_project]) }
|
||||||
|
end
|
||||||
|
|
||||||
describe 'filter by non_public' do
|
describe 'filter by non_public' do
|
||||||
let(:params) { { non_public: true } }
|
let(:params) { { non_public: true } }
|
||||||
before do
|
before do
|
||||||
|
|
Loading…
Reference in a new issue