40 lines
1 KiB
Ruby
40 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module IncidentManagement
|
|
class CreateIncidentLabelService < BaseService
|
|
LABEL_PROPERTIES = {
|
|
title: 'incident',
|
|
color: '#CC0033',
|
|
description: <<~DESCRIPTION.chomp
|
|
Denotes a disruption to IT services and \
|
|
the associated issues require immediate attention
|
|
DESCRIPTION
|
|
}.freeze
|
|
|
|
def execute
|
|
label = Labels::FindOrCreateService
|
|
.new(current_user, project, **LABEL_PROPERTIES)
|
|
.execute
|
|
|
|
if label.invalid?
|
|
log_invalid_label_info(label)
|
|
return ServiceResponse.error(payload: { label: label }, message: full_error_message(label))
|
|
end
|
|
|
|
ServiceResponse.success(payload: { label: label })
|
|
end
|
|
|
|
private
|
|
|
|
def log_invalid_label_info(label)
|
|
log_info <<~TEXT.chomp
|
|
Cannot create incident label "#{label.title}" \
|
|
for "#{label.project.full_name}": #{full_error_message(label)}.
|
|
TEXT
|
|
end
|
|
|
|
def full_error_message(label)
|
|
label.errors.full_messages.to_sentence
|
|
end
|
|
end
|
|
end
|