49 lines
1.2 KiB
Ruby
49 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Packages
|
|
class CreatePackageService < BaseService
|
|
protected
|
|
|
|
def find_or_create_package!(package_type, name: params[:name], version: params[:version])
|
|
project
|
|
.packages
|
|
.with_package_type(package_type)
|
|
.safe_find_or_create_by!(name: name, version: version) do |package|
|
|
package.status = params[:status] if params[:status]
|
|
package.creator = package_creator
|
|
|
|
add_build_info(package)
|
|
end
|
|
end
|
|
|
|
def create_package!(package_type, attrs = {})
|
|
project
|
|
.packages
|
|
.with_package_type(package_type)
|
|
.create!(package_attrs(attrs)) do |package|
|
|
add_build_info(package)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def package_attrs(attrs)
|
|
{
|
|
creator: package_creator,
|
|
name: params[:name],
|
|
version: params[:version],
|
|
status: params[:status]
|
|
}.compact.merge(attrs)
|
|
end
|
|
|
|
def package_creator
|
|
current_user if current_user.is_a?(User)
|
|
end
|
|
|
|
def add_build_info(package)
|
|
if params[:build].present?
|
|
package.build_infos.new(pipeline: params[:build].pipeline)
|
|
end
|
|
end
|
|
end
|
|
end
|