From 48aff82709769b098321c738f3444b9bdaa694c6 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 21 Oct 2020 07:08:36 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-5-stable-ee --- app/services/todos/destroy/entity_leave_service.rb | 74 +++++++++------------- 1 file changed, 30 insertions(+), 44 deletions(-) (limited to 'app/services/todos') diff --git a/app/services/todos/destroy/entity_leave_service.rb b/app/services/todos/destroy/entity_leave_service.rb index 0c0548a17a1..97c56b84434 100644 --- a/app/services/todos/destroy/entity_leave_service.rb +++ b/app/services/todos/destroy/entity_leave_service.rb @@ -7,16 +7,14 @@ module Todos attr_reader :user, :entity - # rubocop: disable CodeReuse/ActiveRecord def initialize(user_id, entity_id, entity_type) unless %w(Group Project).include?(entity_type) raise ArgumentError.new("#{entity_type} is not an entity user can leave") end - @user = User.find_by(id: user_id) - @entity = entity_type.constantize.find_by(id: entity_id) + @user = UserFinder.new(user_id).find_by_id + @entity = entity_type.constantize.find_by(id: entity_id) # rubocop: disable CodeReuse/ActiveRecord end - # rubocop: enable CodeReuse/ActiveRecord def execute return unless entity && user @@ -42,34 +40,37 @@ module Todos end end - # rubocop: disable CodeReuse/ActiveRecord def remove_confidential_issue_todos - Todo.where( - target_id: confidential_issues.select(:id), target_type: Issue.name, user_id: user.id - ).delete_all + Todo + .for_target(confidential_issues.select(:id)) + .for_type(Issue.name) + .for_user(user) + .delete_all end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def remove_project_todos # Issues are viewable by guests (even in private projects), so remove those todos # from projects without guest access - Todo.where(project_id: non_authorized_guest_projects, user_id: user.id) + Todo + .for_project(non_authorized_guest_projects) + .for_user(user) .delete_all # MRs require reporter access, so remove those todos that are not authorized - Todo.where(project_id: non_authorized_reporter_projects, target_type: MergeRequest.name, user_id: user.id) + Todo + .for_project(non_authorized_reporter_projects) + .for_type(MergeRequest.name) + .for_user(user) .delete_all end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def remove_group_todos - Todo.where(group_id: non_authorized_groups, user_id: user.id).delete_all + Todo + .for_group(non_authorized_groups) + .for_user(user) + .delete_all end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def projects condition = case entity when Project @@ -78,55 +79,40 @@ module Todos { namespace_id: non_authorized_reporter_groups } end - Project.where(condition) + Project.where(condition) # rubocop: disable CodeReuse/ActiveRecord end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def authorized_reporter_projects user.authorized_projects(Gitlab::Access::REPORTER).select(:id) end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def authorized_guest_projects user.authorized_projects(Gitlab::Access::GUEST).select(:id) end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def non_authorized_reporter_projects - projects.where('id NOT IN (?)', authorized_reporter_projects) + projects.id_not_in(authorized_reporter_projects) end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def non_authorized_guest_projects - projects.where('id NOT IN (?)', authorized_guest_projects) + projects.id_not_in(authorized_guest_projects) end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def authorized_reporter_groups GroupsFinder.new(user, min_access_level: Gitlab::Access::REPORTER).execute.select(:id) end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def non_authorized_groups return [] unless entity.is_a?(Namespace) entity.self_and_descendants.select(:id) - .where('id NOT IN (?)', GroupsFinder.new(user).execute.select(:id)) + .id_not_in(GroupsFinder.new(user).execute.select(:id)) end - # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def non_authorized_reporter_groups entity.self_and_descendants.select(:id) - .where('id NOT IN (?)', authorized_reporter_groups) + .id_not_in(authorized_reporter_groups) end - # rubocop: enable CodeReuse/ActiveRecord def user_has_reporter_access? return unless entity.is_a?(Namespace) @@ -134,16 +120,16 @@ module Todos entity.member?(User.find(user.id), Gitlab::Access::REPORTER) end - # rubocop: disable CodeReuse/ActiveRecord def confidential_issues - assigned_ids = IssueAssignee.select(:issue_id).where(user_id: user.id) + assigned_ids = IssueAssignee.select(:issue_id).for_assignee(user) - Issue.where(project_id: projects, confidential: true) - .where('project_id NOT IN(?)', authorized_reporter_projects) - .where('author_id != ?', user.id) - .where('id NOT IN (?)', assigned_ids) + Issue + .in_projects(projects) + .confidential_only + .not_in_projects(authorized_reporter_projects) + .not_authored_by(user) + .id_not_in(assigned_ids) end - # rubocop: enable CodeReuse/ActiveRecord end end end -- cgit v1.2.1