summaryrefslogtreecommitdiff
path: root/app/services/incident_management/incidents/update_severity_service.rb
blob: 5b150f3f02ed9dea0bd985e970f55e6eb2c1600b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# frozen_string_literal: true

module IncidentManagement
  module Incidents
    class UpdateSeverityService < BaseService
      def initialize(issuable, current_user, severity)
        super(issuable.project, current_user)

        @issuable = issuable
        @severity = severity.to_s.downcase
        @severity = IssuableSeverity::DEFAULT unless IssuableSeverity.severities.key?(@severity)
      end

      def execute
        return unless issuable.incident?

        update_severity!
        add_system_note
      end

      private

      attr_reader :issuable, :severity

      def issuable_severity
        issuable.issuable_severity || issuable.build_issuable_severity(issue_id: issuable.id)
      end

      def update_severity!
        issuable_severity.update!(severity: severity)
      end

      def add_system_note
        ::IncidentManagement::AddSeveritySystemNoteWorker.perform_async(issuable.id, current_user.id)
      end
    end
  end
end