# frozen_string_literal: true

module Gitlab
  module Geo
    # This class is responsible for:
    #   * Finding a LfsObject record
    #   * Requesting and downloading the LfsObject's file from the primary
    #   * Returning a detailed Result
    #
    # TODO: Rearrange things so this class does not inherit FileDownloader
    class LfsDownloader < FileDownloader
      # rubocop: disable CodeReuse/ActiveRecord
      def execute
        lfs_object = LfsObject.find_by(id: object_db_id)
        return fail_before_transfer unless lfs_object.present?

        transfer = ::Gitlab::Geo::Replication::LfsTransfer.new(lfs_object)
        Result.from_transfer_result(transfer.download_from_primary)
      end
      # rubocop: enable CodeReuse/ActiveRecord
    end
  end
end