Skip to content

⚙️ Backend Feature Request — Enhance Sample Search API

🗣️ User Feedback / Suggested Improvements

  • Add Person as a filter option.
  • Add Sample Type as a filter option.
  • Update search box placeholder text: change “Name” → “Sample Name”.
  • Review Date Types filter: remove inappropriate types (also on sample creation).

🎯 Goal

Enhance the Sample Search API to support:

  • Person filter (SampleUser)
  • Sample Type filter (SampleType.name)
  • Valid Date Types
  • Advanced search with multiple combined criteria

All while keeping existing filters intact:

  • search (query string)
  • keyword
  • proposal_id
  • date_from / date_to
  • date_type
  • sort_column / sort_order
  • only_user

Endpoints remain:

  • POST /sample/initiate → create query, return cursor_id
  • GET /sample → fetch paginated results using cursor_id

🧩 Implementation

Payload Example

{
  "search": "query",
  "keyword": "...",
  "proposal_id": "...",
  "date_from": "YYYY-MM-DD",
  "date_to": "YYYY-MM-DD",
  "date_type": "...",
  "sort_column": "name",
  "sort_order": "asc",
  "only_user": true,
  "person_ids": 1, 2, 3],        // New filter
  "sample_type_ids": [5, 6]       // New filter
}

Backend Tasks

  • Extend initiate_samples_query function to include person_ids and sample_type_ids in cursor generation point.
  • Update the query procedure in GET /sample to filter samples by:
  • * Sample.sample_usersperson_ids
  • * Sample.sample_typesample_type_ids
  • Ensure cursor-based pagination and GET /sample behavior remain compatible.
  • Maintain existing filters and logic.

🧪 Testing

  • Person filter returns only relevant samples
  • Sample Type filter returns correct samples
  • Existing filters still work as expected
  • Advanced search combining multiple filters works correctly
  • Cursor-based pagination functions properly
  • with_relations=true returns related objects

🏷️ Labels

backend feature search sample enhancement priority::medium