56 lines
1.3 KiB
Ruby
56 lines
1.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module TasksToBeDone
|
||
|
class BaseService < ::IssuableBaseService
|
||
|
LABEL_PREFIX = 'tasks to be done'
|
||
|
|
||
|
def initialize(project:, current_user:, assignee_ids: [])
|
||
|
params = {
|
||
|
assignee_ids: assignee_ids,
|
||
|
title: title,
|
||
|
description: description,
|
||
|
add_labels: label_name
|
||
|
}
|
||
|
super(project: project, current_user: current_user, params: params)
|
||
|
end
|
||
|
|
||
|
def execute
|
||
|
if (issue = existing_task_issue)
|
||
|
update_service = Issues::UpdateService.new(project: project, current_user: current_user, params: { add_assignee_ids: params[:assignee_ids] })
|
||
|
update_service.execute(issue)
|
||
|
else
|
||
|
build_service = Issues::BuildService.new(project: project, current_user: current_user, params: params)
|
||
|
create(build_service.execute)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def existing_task_issue
|
||
|
IssuesFinder.new(
|
||
|
current_user,
|
||
|
project_id: project.id,
|
||
|
state: 'opened',
|
||
|
non_archived: true,
|
||
|
label_name: label_name
|
||
|
).execute.last
|
||
|
end
|
||
|
|
||
|
def title
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
|
||
|
def description
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
|
||
|
def label_suffix
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
|
||
|
def label_name
|
||
|
"#{LABEL_PREFIX}:#{label_suffix}"
|
||
|
end
|
||
|
end
|
||
|
end
|