Module: Sequencescape::Api::V2

Defined in:
app/sequencescape/sequencescape/api/v2.rb

Overview

Interface for the json API based Sequencescape V2 api Contains query plans

Constant Summary collapse

PLATE_PRESENTER_INCLUDES =
:purpose,
  { child_plates: :purpose },
  {
    wells: [
      {
        downstream_tubes: 'purpose',
        requests_as_source: %w[request_type primer_panel pre_capture_pool submission],
        aliquots: ['sample.sample_metadata', { request: %w[request_type primer_panel pre_capture_pool submission] }],
        qc_results: []
      }
    ]
  }
].freeze

Class Method Summary collapse

Class Method Details

.additional_plates_for_presenter(query) ⇒ Object



47
48
49
# File 'app/sequencescape/sequencescape/api/v2.rb', line 47

def self.additional_plates_for_presenter(query)
  Plate.includes(*PLATE_PRESENTER_INCLUDES).find(query)
end

.merge_page_results(query_builder) ⇒ Object

Retrieves results of query builder (JsonApiClient::Query::Builder) page by page and combines them into one list



86
87
88
89
90
91
92
93
# File 'app/sequencescape/sequencescape/api/v2.rb', line 86

def self.merge_page_results(query_builder)
  total_pages = query_builder.pages.total_pages
  first_page = query_builder.to_a.dup
  (2..total_pages).reduce(first_page) do |all_pages, page_number|
    current_page = query_builder.page(page_number).to_a
    all_pages.concat(current_page)
  end
end

.minimal_labware_by_barcode(barcode, select: :uuid) ⇒ Sequencescape::V2::Api::Labware

Returns a V2::Api::Labware object with just the UUID, suitable for redirection

Parameters:

  • barcode (String)

    The barcode to find

Returns:

  • (Sequencescape::V2::Api::Labware)

    Found labware object



28
29
30
31
32
33
# File 'app/sequencescape/sequencescape/api/v2.rb', line 28

def self.minimal_labware_by_barcode(barcode, select: :uuid)
  Sequencescape::Api::V2::Labware
    .where(barcode: barcode)
    .select(tube_racks: select, plates: select, tubes: select)
    .first
end

.plate_for_completion(uuid) ⇒ Object



65
66
67
# File 'app/sequencescape/sequencescape/api/v2.rb', line 65

def self.plate_for_completion(uuid)
  Plate.includes('wells.aliquots.request.submission,wells.aliquots.request.request_type').find(uuid: uuid).first
end

.plate_for_presenter(query) ⇒ Object

sample_description added into includes here for use in bioscan plate label creation



36
37
38
39
40
41
42
43
44
45
# File 'app/sequencescape/sequencescape/api/v2.rb', line 36

def self.plate_for_presenter(query)
  Plate
    .includes(*PLATE_PRESENTER_INCLUDES)
    .select(
      submissions: 'lanes_of_sequencing',
      sample_metadata: %w[sample_common_name collected_by sample_description]
    )
    .find(query)
    .first
end

.plate_with_custom_includes(include_params, search_params) ⇒ Object



76
77
78
# File 'app/sequencescape/sequencescape/api/v2.rb', line 76

def self.plate_with_custom_includes(include_params, search_params)
  Plate.includes(include_params).find(search_params).first
end

.plate_with_wells(uuid) ⇒ Object



51
52
53
# File 'app/sequencescape/sequencescape/api/v2.rb', line 51

def self.plate_with_wells(uuid)
  Plate.includes('wells').find(uuid: uuid).first
end

.tube_for_completion(uuid) ⇒ Object



69
70
71
72
73
74
# File 'app/sequencescape/sequencescape/api/v2.rb', line 69

def self.tube_for_completion(uuid)
  Tube
    .includes('receptacle.aliquots.request.submission,receptacle.aliquots.request.request_type')
    .find(uuid: uuid)
    .first
end

.tube_rack_for_presenter(query) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'app/sequencescape/sequencescape/api/v2.rb', line 55

def self.tube_rack_for_presenter(query)
  TubeRack
    .includes(
      'racked_tubes.tube.purpose,' \
        'racked_tubes.tube.receptacle.aliquots.request.request_type'
    )
    .find(query)
    .first
end

.tube_with_custom_includes(include_params, select_params, search_params) ⇒ Object



80
81
82
# File 'app/sequencescape/sequencescape/api/v2.rb', line 80

def self.tube_with_custom_includes(include_params, select_params, search_params)
  Tube.includes(include_params).select(select_params).find(search_params).first
end