diff options
author | Brett Walker <bwalker@gitlab.com> | 2019-05-31 20:19:08 -0500 |
---|---|---|
committer | Brett Walker <bwalker@gitlab.com> | 2019-06-21 07:05:42 -0500 |
commit | 4a85e263b4afe2e1e64dcaf55856add6e7aed764 (patch) | |
tree | 91f9d823f7c1b3ecc45ae0b8c20bcd4bf8b69a42 /app/services/issues | |
parent | 6fa900547dbd30b0db0070f87dbeb4b05d485b9b (diff) | |
download | gitlab-ce-4a85e263b4afe2e1e64dcaf55856add6e7aed764.tar.gz |
Add reorder action to Project IssuesControllerbw-issue-reorder
to support manual sorting on the frontend
Diffstat (limited to 'app/services/issues')
-rw-r--r-- | app/services/issues/reorder_service.rb | 48 | ||||
-rw-r--r-- | app/services/issues/update_service.rb | 1 |
2 files changed, 49 insertions, 0 deletions
diff --git a/app/services/issues/reorder_service.rb b/app/services/issues/reorder_service.rb new file mode 100644 index 00000000000..02c18d31b5e --- /dev/null +++ b/app/services/issues/reorder_service.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Issues + class ReorderService < Issues::BaseService + def execute(issue) + return false unless can?(current_user, :update_issue, issue) + return false if group && !can?(current_user, :read_group, group) + + attrs = issue_params(group) + return false if attrs.empty? + + update(issue, attrs) + end + + private + + def group + return unless params[:group_full_path] + + @group ||= Group.find_by_full_path(params[:group_full_path]) + end + + def update(issue, attrs) + ::Issues::UpdateService.new(project, current_user, attrs).execute(issue) + rescue ActiveRecord::RecordNotFound + false + end + + def issue_params(group) + attrs = {} + + if move_between_ids + attrs[:move_between_ids] = move_between_ids + attrs[:board_group_id] = group&.id + end + + attrs + end + + def move_between_ids + ids = [params[:move_after_id], params[:move_before_id]] + .map(&:to_i) + .map { |m| m.positive? ? m : nil } + + ids.any? ? ids : nil + end + end +end diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb index cb2337d29d4..6b9f23f24cd 100644 --- a/app/services/issues/update_service.rb +++ b/app/services/issues/update_service.rb @@ -76,6 +76,7 @@ module Issues issue_before = get_issue_if_allowed(before_id, board_group_id) issue_after = get_issue_if_allowed(after_id, board_group_id) + raise ActiveRecord::RecordNotFound unless issue_before || issue_after issue.move_between(issue_before, issue_after) end |