diff options
Diffstat (limited to 'app/services/labels/create_service.rb')
-rw-r--r-- | app/services/labels/create_service.rb | 38 |
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 |