diff options
Diffstat (limited to 'app/services/work_items/delete_task_service.rb')
-rw-r--r-- | app/services/work_items/delete_task_service.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/app/services/work_items/delete_task_service.rb b/app/services/work_items/delete_task_service.rb new file mode 100644 index 00000000000..3bb23576442 --- /dev/null +++ b/app/services/work_items/delete_task_service.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +module WorkItems + class DeleteTaskService + def initialize(work_item:, current_user: nil, task_params: {}, lock_version:) + @work_item = work_item + @current_user = current_user + @task_params = task_params + @lock_version = lock_version + @task = task_params[:task] + @errors = [] + end + + def execute + transaction_result = ::WorkItem.transaction do + replacement_result = TaskListReferenceRemovalService.new( + work_item: @work_item, + task: @task, + line_number_start: @task_params[:line_number_start], + line_number_end: @task_params[:line_number_end], + lock_version: @lock_version, + current_user: @current_user + ).execute + + break ::ServiceResponse.error(message: replacement_result.errors, http_status: 422) if replacement_result.error? + + delete_result = ::WorkItems::DeleteService.new( + project: @task.project, + current_user: @current_user + ).execute(@task) + + if delete_result.error? + @errors += delete_result.errors + raise ActiveRecord::Rollback + end + + delete_result + end + + return transaction_result if transaction_result + + ::ServiceResponse.error(message: @errors, http_status: 422) + end + end +end |