diff options
Diffstat (limited to 'lib/api/concerns/packages')
-rw-r--r-- | lib/api/concerns/packages/debian_package_endpoints.rb | 19 | ||||
-rw-r--r-- | lib/api/concerns/packages/npm_endpoints.rb | 29 |
2 files changed, 28 insertions, 20 deletions
diff --git a/lib/api/concerns/packages/debian_package_endpoints.rb b/lib/api/concerns/packages/debian_package_endpoints.rb index 25c97932e31..45290cb3e44 100644 --- a/lib/api/concerns/packages/debian_package_endpoints.rb +++ b/lib/api/concerns/packages/debian_package_endpoints.rb @@ -13,7 +13,6 @@ module API component: ::Packages::Debian::COMPONENT_REGEX, architecture: ::Packages::Debian::ARCHITECTURE_REGEX }.freeze - LIST_PACKAGE = 'list_package' included do feature_category :package_registry @@ -41,8 +40,6 @@ module API package_file = distribution_from!(project).package_files.with_file_name(params[:file_name]).last! - track_debian_package_event 'pull_package' - present_package_file!(package_file) end @@ -73,22 +70,8 @@ module API no_content! # empty component files are not always persisted in DB end - track_debian_package_event LIST_PACKAGE - present_carrierwave_file!(component_file.file) end - - def track_debian_package_event(action) - if project_or_group.is_a?(Project) - project = project_or_group - namespace = project_or_group.namespace - else - project = nil - namespace = project_or_group - end - - track_package_event(action, :debian, project: project, namespace: namespace, user: current_user) - end end rescue_from ArgumentError do |e| @@ -146,7 +129,6 @@ module API get 'Release' do distribution = distribution_from!(project_or_group) - track_debian_package_event LIST_PACKAGE present_carrierwave_file!(distribution.file) end @@ -166,7 +148,6 @@ module API get 'InRelease' do distribution = distribution_from!(project_or_group) - track_debian_package_event LIST_PACKAGE present_carrierwave_file!(distribution.signed_file) end diff --git a/lib/api/concerns/packages/npm_endpoints.rb b/lib/api/concerns/packages/npm_endpoints.rb index 74ad3bb296f..ec20440f013 100644 --- a/lib/api/concerns/packages/npm_endpoints.rb +++ b/lib/api/concerns/packages/npm_endpoints.rb @@ -21,12 +21,18 @@ module API included do helpers ::API::Helpers::Packages::DependencyProxyHelpers + rescue_from ActiveRecord::RecordInvalid do |e| + render_structured_api_error!({ message: e.message, error: e.message }, 400) + end + before do require_packages_enabled! authenticate_non_get! end helpers do + include Gitlab::Utils::StrongMemoize + params :package_name do requires :package_name, type: String, file_path: true, desc: 'Package name', documentation: { example: 'mypackage' } @@ -51,6 +57,12 @@ module API def generate_metadata_service(packages) ::Packages::Npm::GenerateMetadataService.new(params[:package_name], packages) end + + def metadata_cache + ::Packages::Npm::MetadataCache + .find_by_package_name_and_project_id(params[:package_name], project.id) + end + strong_memoize_attr :metadata_cache end params do @@ -80,7 +92,7 @@ module API packages = ::Packages::Npm::PackageFinder.new(package_name, project: project) .execute - not_found! if packages.empty? + not_found!('Package') if packages.empty? track_package_event(:list_tags, :npm, project: project, namespace: project.namespace) @@ -122,6 +134,8 @@ module API track_package_event(:create_tag, :npm, project: project, namespace: project.namespace) + enqueue_sync_metadata_cache_worker(project, package_name) + ::Packages::Npm::CreateTagService.new(package, tag).execute no_content! @@ -156,6 +170,8 @@ module API track_package_event(:delete_tag, :npm, project: project, namespace: project.namespace) + enqueue_sync_metadata_cache_worker(project, package_name) + ::Packages::RemoveTagService.new(package_tag).execute no_content! @@ -202,6 +218,17 @@ module API not_found!('Packages') if packages.empty? + if endpoint_scope == :project && Feature.enabled?(:npm_metadata_cache, project) + if metadata_cache&.file&.exists? + metadata_cache.touch_last_downloaded_at + present_carrierwave_file!(metadata_cache.file) + + break + end + + enqueue_sync_metadata_cache_worker(project, package_name) + end + present ::Packages::Npm::PackagePresenter.new(generate_metadata_service(packages).execute), with: ::API::Entities::NpmPackage end |