diff options
Diffstat (limited to 'app/services/work_items/callbacks/current_user_todos.rb')
-rw-r--r-- | app/services/work_items/callbacks/current_user_todos.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/app/services/work_items/callbacks/current_user_todos.rb b/app/services/work_items/callbacks/current_user_todos.rb new file mode 100644 index 00000000000..c6c74a5ce3d --- /dev/null +++ b/app/services/work_items/callbacks/current_user_todos.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module WorkItems + module Callbacks + class CurrentUserTodos < Base + def before_update + return unless params.present? && params.key?(:action) + + case params[:action] + when "add" + add_todo + when "mark_as_done" + mark_as_done(params[:todo_id]) + end + end + + private + + def add_todo + return unless has_permission?(:create_todo) + + TodoService.new.mark_todo(work_item, current_user)&.first + end + + def mark_as_done(todo_id) + todos = TodosFinder.new(current_user, state: :pending, target_id: work_item.id).execute + todos = todo_id ? todos.id_in(todo_id) : todos + + return if todos.empty? + + TodoService.new.resolve_todos(todos, current_user, resolved_by_action: :api_done) + end + end + end +end |