File: last_usage.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (35 lines) | stat: -rw-r--r-- 1,327 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# frozen_string_literal: true

module Ci
  module Catalog
    module Resources
      module Components
        class LastUsage < ::ApplicationRecord
          include EachBatch

          self.table_name = 'catalog_resource_component_last_usages'
          self.primary_key = :id

          scope :older_than_30_days, -> { where(last_used_date: ...30.days.ago.to_date) }

          belongs_to :component, class_name: 'Ci::Catalog::Resources::Component', inverse_of: :last_usages
          belongs_to :catalog_resource, class_name: 'Ci::Catalog::Resource', inverse_of: :component_last_usages
          belongs_to :component_project, class_name: 'Project', inverse_of: :ci_component_last_usages

          validates :component, :catalog_resource, :component_project, :used_by_project_id, presence: true

          validates :last_used_date, uniqueness: { scope: [:component_id, :used_by_project_id] }, presence: true

          def self.get_usage_for(component, used_by_project)
            Ci::Catalog::Resources::Components::LastUsage.find_or_initialize_by(
              component: component,
              catalog_resource: component.catalog_resource,
              component_project: component.project,
              used_by_project_id: used_by_project.id
            )
          end
        end
      end
    end
  end
end