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
|