summaryrefslogtreecommitdiff
path: root/app/services/work_items/delete_task_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/work_items/delete_task_service.rb')
-rw-r--r--app/services/work_items/delete_task_service.rb45
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