Class: Packages::Nuget::CreateTemporaryPackageService

Inherits:
Object
  • Object
show all
Defined in:
app/services/packages/nuget/create_temporary_package_service.rb

Constant Summary collapse

ERRORS =
{
  failed_to_create_temporary_package: ServiceResponse.error(message: 'Failed to create temporary package',
    reason: :bad_request),
  failed_to_create_package_file: ServiceResponse.error(message: 'Failed to create package file',
    reason: :bad_request),
  unauthorized: ServiceResponse.error(message: 'Unauthorized', reason: :unauthorized)
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(project:, user:, params: {}) ⇒ CreateTemporaryPackageService

Returns a new instance of CreateTemporaryPackageService.



14
15
16
17
18
19
# File 'app/services/packages/nuget/create_temporary_package_service.rb', line 14

def initialize(project:, user:, params: {})
  @project = project
  @user = user
  @package_params = params[:package_params]
  @package_file_params = params[:package_file_params]
end

Instance Method Details

#executeObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/services/packages/nuget/create_temporary_package_service.rb', line 21

def execute
  return ERRORS[:unauthorized] unless user.can?(:create_package, project)

  response = ERRORS[:failed_to_create_temporary_package]

  # Transaction to cover temporary package and package file creation
  ApplicationRecord.transaction do
    response = create_temporary_package
    raise ActiveRecord::Rollback if response.error?

    response = create_package_file(response.payload[:package])
    raise ActiveRecord::Rollback if response.error?
  end

  return response if response.error?

  # Enqueued outside of transaction to avoid blocking and to ensure jobs are only enqueued on success
  ::Packages::Nuget::ExtractionWorker.perform_async(response.payload[:package_file].id)

  response
end