45 lines
1 KiB
Ruby
45 lines
1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module AlertManagement
|
||
|
module HttpIntegrations
|
||
|
class DestroyService
|
||
|
# @param integration [AlertManagement::HttpIntegration]
|
||
|
# @param current_user [User]
|
||
|
def initialize(integration, current_user)
|
||
|
@integration = integration
|
||
|
@current_user = current_user
|
||
|
end
|
||
|
|
||
|
def execute
|
||
|
return error_no_permissions unless allowed?
|
||
|
|
||
|
if integration.destroy
|
||
|
success
|
||
|
else
|
||
|
error(integration.errors.full_messages.to_sentence)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
attr_reader :integration, :current_user
|
||
|
|
||
|
def allowed?
|
||
|
current_user&.can?(:admin_operations, integration)
|
||
|
end
|
||
|
|
||
|
def error(message)
|
||
|
ServiceResponse.error(message: message)
|
||
|
end
|
||
|
|
||
|
def success
|
||
|
ServiceResponse.success(payload: { integration: integration })
|
||
|
end
|
||
|
|
||
|
def error_no_permissions
|
||
|
error(_('You have insufficient permissions to remove this HTTP integration'))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|