Class: Api::V2::SampleResource

Inherits:
BaseResource
  • Object
show all
Defined in:
app/resources/api/v2/sample_resource.rb

Overview

Note:

Access this resource via the /api/v2/samples/ endpoint.

Provides a JSON:API representation of Sample, which represents a biological or synthetic sample used in laboratory processes. This resource allows users to retrieve and filter samples based on various attributes such as UUID, name, or Sanger Sample ID.

For more information about JSON:API see the JSON:API Specifications or look at the JSONAPI::Resources package for Sequencescape's implementation of the JSON:API standard.

Examples:

GET request for all samples

GET /api/v2/samples/

GET request for a specific sample by ID

GET /api/v2/samples/123/

POST request to create a new sample

POST /api/v2/samples/
{
  "data": {
    "type": "samples",
    "attributes": {
      "name": "Sample_A",
      "sanger_sample_id": "S12345",
      "control": false,
      "control_type": "positive"
    },
    "relationships": {
      "sample_metadata": {
        "data": {
          "type": "sample_metadata",
          "id": "1"
        }
      },
      "studies": {
        "data": [
          {
            "type": "studies",
            "id": "1"
          },
        ]
      },
      "component_samples": {
        "data": [
          {
            "type": "component_samples",
            "id": "1"
          },
        ]
      }
    }
  }
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from BaseResource

apply_includes, creatable_fields, default_includes, #fetchable_fields, inclusions, resolve_relationship_names_to_relations, updatable_fields

Instance Attribute Details

#component_samplesArray<ComponentSampleResource>

Note:

A sample may consist of multiple component samples.

Returns The component samples associated with this sample.

Returns:

  • (Array<ComponentSampleResource>)

    The component samples associated with this sample.



115
# File 'app/resources/api/v2/sample_resource.rb', line 115

has_many :component_samples

#controlBoolean

Note:

Optional field.

Returns Indicates whether this sample is a control sample.

Returns:

  • (Boolean)

    Indicates whether this sample is a control sample.



84
# File 'app/resources/api/v2/sample_resource.rb', line 84

attribute :control

#control_typeString

Note:

Optional field.

Returns The type of control sample (e.g., positive control, negative control).

Returns:

  • (String)

    The type of control sample (e.g., positive control, negative control).



89
# File 'app/resources/api/v2/sample_resource.rb', line 89

attribute :control_type

#nameString

Note:

This field is optional.

Returns The name of the sample.

Returns:

  • (String)

    The name of the sample.



69
# File 'app/resources/api/v2/sample_resource.rb', line 69

attribute :name

#sample_manifestSampleManifestResource

Note:

Optional relationship.

Returns The manifest to which this sample belongs, often linking it to a larger set of processed samples.

Returns:

  • (SampleManifestResource)

    The manifest to which this sample belongs, often linking it to a larger set of processed samples.



105
# File 'app/resources/api/v2/sample_resource.rb', line 105

has_one :sample_manifest

#sample_metadataSampleMetadataResource

Note:

Optional relationship.

Returns The metadata associated with this sample, containing additional details like collection method and donor information.

Returns:

  • (SampleMetadataResource)

    The metadata associated with this sample, containing additional details like collection method and donor information.



99
# File 'app/resources/api/v2/sample_resource.rb', line 99

has_one :sample_metadata, class_name: 'SampleMetadata', foreign_key_on: :related

#sanger_sample_idString

Note:

This field is optional but commonly used for sample tracking.

Returns The unique identifier assigned to the sample within the Sanger Institute.

Returns:

  • (String)

    The unique identifier assigned to the sample within the Sanger Institute.



74
# File 'app/resources/api/v2/sample_resource.rb', line 74

attribute :sanger_sample_id

#studiesArray<StudyResource>

Note:

A sample can be linked to multiple studies.

Returns The studies associated with this sample.

Returns:

  • (Array<StudyResource>)

    The studies associated with this sample.



110
# File 'app/resources/api/v2/sample_resource.rb', line 110

has_many :studies

#uuidString (readonly)

Note:

This value is automatically assigned upon creation and cannot be modified.

Returns The globally unique identifier (UUID) for this sample.

Returns:

  • (String)

    The globally unique identifier (UUID) for this sample.



79
# File 'app/resources/api/v2/sample_resource.rb', line 79

attribute :uuid, readonly: true

Instance Method Details

#filter_by_nameObject

Filters samples by their name.

Examples:

GET request filtering by name

GET /api/v2/samples?filter[name]=Sample_A


137
# File 'app/resources/api/v2/sample_resource.rb', line 137

filter :name

#filter_by_sanger_sample_idObject

Filters samples by their Sanger Sample ID.

Examples:

GET request filtering by Sanger Sample ID

GET /api/v2/samples?filter[sanger_sample_id]=S12345


131
# File 'app/resources/api/v2/sample_resource.rb', line 131

filter :sanger_sample_id

#filter_by_uuidObject

Filters samples by their UUID.

Examples:

GET request filtering by UUID

GET /api/v2/samples?filter[uuid]=550e8400-e29b-41d4-a716-446655440000


125
# File 'app/resources/api/v2/sample_resource.rb', line 125

filter :uuid, apply: ->(records, value, _options) { records.with_uuid(value) }