summaryrefslogtreecommitdiff
path: root/app/services/labels/create_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/labels/create_service.rb')
-rw-r--r--app/services/labels/create_service.rb38
1 files changed, 18 insertions, 20 deletions
diff --git a/app/services/labels/create_service.rb b/app/services/labels/create_service.rb
index ffc7851baab..97281b7c048 100644
--- a/app/services/labels/create_service.rb
+++ b/app/services/labels/create_service.rb
@@ -1,36 +1,34 @@
module Labels
class CreateService < Labels::BaseService
def execute
- label = subject.labels.build(params)
+ Label.transaction do
+ label = subject.labels.build(params)
+ label.label_type = subject.is_a?(Group) ? :group_label : :project_label
- return label if subject.is_a?(Project) && subject.group.present? && subject.group.labels.where(title: title).exists?
+ return label if subject.is_a?(Project) && exists_at_group_level?
- if label.save
- if subject.is_a?(Group)
- subject.projects.each do |project|
- project.labels.find_or_create_by!(title: title) do |label|
- label.color = color
- label.description = description
- end
- end
+ if label.save && subject.is_a?(Group)
+ replicate_labels_to_projects
end
- end
- label
+ label
+ end
end
private
- def title
- params[:title]
- end
-
- def color
- params[:color]
+ def exists_at_group_level?
+ subject.group && subject.group.labels.where(title: params[:title]).exists?
end
- def description
- params[:description]
+ def replicate_labels_to_projects
+ subject.projects.each do |project|
+ project.labels.find_or_create_by!(title: params[:title]) do |label|
+ label.color = params[:color]
+ label.description = params[:description]
+ label.label_type = :group_label
+ end
+ end
end
end
end