summaryrefslogtreecommitdiff
path: root/app/services/todos/destroy/entity_leave_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/todos/destroy/entity_leave_service.rb')
-rw-r--r--app/services/todos/destroy/entity_leave_service.rb74
1 files changed, 30 insertions, 44 deletions
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