File: relation_import_tracker.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 (50 lines) | stat: -rw-r--r-- 1,292 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# frozen_string_literal: true

module Projects
  module ImportExport
    class RelationImportTracker < ApplicationRecord
      belongs_to :project

      validates :project, presence: true
      validates :status, presence: true
      validates :relation, presence: true
      validate :cannot_be_created_for_importing_project, on: :create

      enum :relation, { issues: 0, merge_requests: 1, ci_pipelines: 2, milestones: 3 }

      state_machine :status, initial: :created do
        state :created, value: 0
        state :started, value: 1
        state :finished, value: 2
        state :failed, value: 3

        event :start do
          transition created: :started
        end

        event :finish do
          transition started: :finished
        end

        event :fail_op do
          transition %i[created started] => :failed
        end
      end

      def stale?
        return false if finished? || failed?

        created_at.before?(24.hours.ago)
      end

      private

      def cannot_be_created_for_importing_project
        return if project.nil?
        return unless project.import_state && !project.import_state.completed?

        errors.add(:base, _('Relation import tracker cannot be created for project with ongoing import'))
      end
    end
  end
end