diff options
Diffstat (limited to 'app/services/packages/destroy_package_service.rb')
-rw-r--r-- | app/services/packages/destroy_package_service.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/app/services/packages/destroy_package_service.rb b/app/services/packages/destroy_package_service.rb new file mode 100644 index 00000000000..697f1fa3ac8 --- /dev/null +++ b/app/services/packages/destroy_package_service.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Packages + class DestroyPackageService < BaseContainerService + alias_method :package, :container + + def execute + return service_response_error("You don't have access to this package", 403) unless user_can_delete_package? + + package.destroy! + + package.sync_maven_metadata(current_user) + + service_response_success('Package was successfully deleted') + rescue StandardError + service_response_error('Failed to remove the package', 400) + end + + private + + def service_response_error(message, http_status) + ServiceResponse.error(message: message, http_status: http_status) + end + + def service_response_success(message) + ServiceResponse.success(message: message) + end + + def user_can_delete_package? + can?(current_user, :destroy_package, package.project) + end + end +end |