summaryrefslogtreecommitdiff
path: root/app/services/packages/debian/find_or_create_package_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/packages/debian/find_or_create_package_service.rb')
-rw-r--r--app/services/packages/debian/find_or_create_package_service.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/app/services/packages/debian/find_or_create_package_service.rb b/app/services/packages/debian/find_or_create_package_service.rb
new file mode 100644
index 00000000000..46e06c9f584
--- /dev/null
+++ b/app/services/packages/debian/find_or_create_package_service.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+module Packages
+ module Debian
+ class FindOrCreatePackageService < ::Packages::CreatePackageService
+ include Gitlab::Utils::StrongMemoize
+
+ def execute
+ package = project.packages
+ .debian
+ .with_name(params[:name])
+ .with_version(params[:version])
+ .with_debian_codename(params[:distribution_name])
+ .first
+
+ package ||= create_package!(
+ :debian,
+ debian_publication_attributes: { distribution_id: distribution.id }
+ )
+
+ ServiceResponse.success(payload: { package: package })
+ end
+
+ private
+
+ def distribution
+ strong_memoize(:distribution) do
+ Packages::Debian::DistributionsFinder.new(project, codename: params[:distribution_name]).execute.last!
+ end
+ end
+ end
+ end
+end