sanger/sequencescape

View on GitHub
app/api/io/transfer_request_collection.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true
module Io
  # Controls API V1 IO for {::TransferRequestCollection}
  class TransferRequestCollection < ::Core::Io::Base
    set_model_for_input(::TransferRequestCollection)
    set_json_root(:transfer_request_collection)

    set_eager_loading do |model|
      # Note we use preload here, rather than includes, as otherwise the target_tubes nuke our loaded transfer requests
      model
        .eager_load(user: :uuid_object)
        .preload(
          target_tubes: [:uuid_object, :purpose, { aliquots: Io::Aliquot::PRELOADS }, :transfer_requests_as_target]
        )
        .preload(
          transfer_requests: [
            :uuid_object,
            { asset: :uuid_object, target_asset: :uuid_object, submission: :uuid_object }
          ]
        )
    end

    define_attribute_and_json_mapping(
      '
      user <= user
      transfer_requests => transfer_requests
      transfer_requests_io <= transfer_requests
      target_tubes => target_tubes
    '
    )
  end
end