diff options
Diffstat (limited to 'app/models/bulk_imports/export.rb')
-rw-r--r-- | app/models/bulk_imports/export.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/app/models/bulk_imports/export.rb b/app/models/bulk_imports/export.rb new file mode 100644 index 00000000000..59ca4dbfec6 --- /dev/null +++ b/app/models/bulk_imports/export.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +module BulkImports + class Export < ApplicationRecord + include Gitlab::Utils::StrongMemoize + + self.table_name = 'bulk_import_exports' + + belongs_to :project, optional: true + belongs_to :group, optional: true + + has_one :upload, class_name: 'BulkImports::ExportUpload' + + validates :project, presence: true, unless: :group + validates :group, presence: true, unless: :project + validates :relation, :status, presence: true + + validate :portable_relation? + + state_machine :status, initial: :started do + state :started, value: 0 + state :finished, value: 1 + state :failed, value: -1 + + event :start do + transition any => :started + end + + event :finish do + transition started: :finished + transition failed: :failed + end + + event :fail_op do + transition any => :failed + end + end + + def portable_relation? + return unless portable + + errors.add(:relation, 'Unsupported portable relation') unless config.portable_relations.include?(relation) + end + + def portable + strong_memoize(:portable) do + project || group + end + end + + def relation_definition + config.portable_tree[:include].find { |include| include[relation.to_sym] } + end + + def config + strong_memoize(:config) do + FileTransfer.config_for(portable) + end + end + end +end |