Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/boards/lists/create_service.rb')
-rw-r--r--app/services/boards/lists/create_service.rb41
1 files changed, 26 insertions, 15 deletions
diff --git a/app/services/boards/lists/create_service.rb b/app/services/boards/lists/create_service.rb
index 6f9a063cb16..9c7a165776e 100644
--- a/app/services/boards/lists/create_service.rb
+++ b/app/services/boards/lists/create_service.rb
@@ -7,34 +7,39 @@ module Boards
def execute(board)
List.transaction do
- target = target(board)
- position = next_position(board)
- create_list(board, type, target, position)
+ case type
+ when :backlog
+ create_backlog(board)
+ else
+ target = target(board)
+ position = next_position(board)
+
+ create_list(board, type, target, position)
+ end
end
end
private
def type
- :label
+ # We don't ever expect to have more than one list
+ # type param at once.
+ if params.key?('backlog')
+ :backlog
+ else
+ :label
+ end
end
def target(board)
strong_memoize(:target) do
- available_labels_for(board).find(params[:label_id])
+ available_labels.find(params[:label_id])
end
end
- def available_labels_for(board)
- options = { include_ancestor_groups: true }
-
- if board.group_board?
- options.merge!(group_id: parent.id, only_group_labels: true)
- else
- options[:project_id] = parent.id
- end
-
- LabelsFinder.new(current_user, options).execute
+ def available_labels
+ ::Labels::AvailableLabelsService.new(current_user, parent, {})
+ .available_labels
end
def next_position(board)
@@ -49,6 +54,12 @@ module Boards
def create_list_attributes(type, target, position)
{ type => target, list_type: type, position: position }
end
+
+ def create_backlog(board)
+ return board.lists.backlog.first if board.lists.backlog.exists?
+
+ board.lists.create(list_type: :backlog, position: nil)
+ end
end
end
end