60 lines
1.4 KiB
Ruby
60 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module ResourceEvents
|
|
class ChangeStateService
|
|
attr_reader :resource, :user
|
|
|
|
def initialize(user:, resource:)
|
|
@user, @resource = user, resource
|
|
end
|
|
|
|
def execute(params)
|
|
@params = params
|
|
|
|
ResourceStateEvent.create(
|
|
user: user,
|
|
resource.class.underscore => resource,
|
|
source_commit: commit_id_of(mentionable_source),
|
|
source_merge_request_id: merge_request_id_of(mentionable_source),
|
|
state: ResourceStateEvent.states[state],
|
|
close_after_error_tracking_resolve: close_after_error_tracking_resolve,
|
|
close_auto_resolve_prometheus_alert: close_auto_resolve_prometheus_alert,
|
|
created_at: resource.system_note_timestamp
|
|
)
|
|
|
|
resource.expire_note_etag_cache
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :params
|
|
|
|
def close_auto_resolve_prometheus_alert
|
|
params[:close_auto_resolve_prometheus_alert] || false
|
|
end
|
|
|
|
def close_after_error_tracking_resolve
|
|
params[:close_after_error_tracking_resolve] || false
|
|
end
|
|
|
|
def state
|
|
params[:status]
|
|
end
|
|
|
|
def mentionable_source
|
|
params[:mentionable_source]
|
|
end
|
|
|
|
def commit_id_of(mentionable_source)
|
|
return unless mentionable_source.is_a?(Commit)
|
|
|
|
mentionable_source.id[0...40]
|
|
end
|
|
|
|
def merge_request_id_of(mentionable_source)
|
|
return unless mentionable_source.is_a?(MergeRequest)
|
|
|
|
mentionable_source.id
|
|
end
|
|
end
|
|
end
|