From 61abd44e50cc3e51fe10695157974fd82f72800f Mon Sep 17 00:00:00 2001 From: Goran Sterjov Date: Sun, 27 Oct 2024 21:54:37 +1100 Subject: [PATCH] always sort with ala taxa on top --- server/src/http/graphql/common/taxonomy.rs | 11 +++++++++++ server/src/http/graphql/species.rs | 3 ++- server/src/http/graphql/taxon.rs | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/server/src/http/graphql/common/taxonomy.rs b/server/src/http/graphql/common/taxonomy.rs index a724c0b..7a10cd1 100644 --- a/server/src/http/graphql/common/taxonomy.rs +++ b/server/src/http/graphql/common/taxonomy.rs @@ -431,3 +431,14 @@ impl TaxonomicRank { } } } + + +pub fn sort_taxa_priority(taxa: &mut Vec) { + use std::cmp::Ordering; + + taxa.sort_by(|a, b| match (a.dataset.name.as_str(), b.dataset.name.as_str()) { + ("Atlas of Living Australia", _) => Ordering::Less, + (_, "Atlas of Living Australia") => Ordering::Greater, + _ => a.dataset.name.cmp(&b.dataset.name), + }); +} diff --git a/server/src/http/graphql/species.rs b/server/src/http/graphql/species.rs index e06889c..eebd1d8 100644 --- a/server/src/http/graphql/species.rs +++ b/server/src/http/graphql/species.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; use tracing::instrument; use uuid::Uuid; +use super::common::taxonomy::sort_taxa_priority; use super::common::{ convert_whole_genome_filters, DatasetDetails, @@ -125,7 +126,7 @@ impl Species { let mut all_taxa = state.database.taxa.find_by_classification(&classification).await?; // sort by dataset name for some consistency - all_taxa.sort_by(|a, b| a.dataset.name.cmp(&b.dataset.name)); + sort_taxa_priority(&mut all_taxa); let taxon = all_taxa .get(0) .ok_or_else(|| Error::NotFound(self.canonical_name.clone()))?; diff --git a/server/src/http/graphql/taxon.rs b/server/src/http/graphql/taxon.rs index 8a96709..9f5b596 100644 --- a/server/src/http/graphql/taxon.rs +++ b/server/src/http/graphql/taxon.rs @@ -5,7 +5,7 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use super::common::datasets::DatasetDetails; -use super::common::taxonomy::{NomenclaturalActType, TaxonDetails, TaxonomicRank, TaxonomicStatus}; +use super::common::taxonomy::{sort_taxa_priority, NomenclaturalActType, TaxonDetails, TaxonomicRank, TaxonomicStatus}; use super::common::{NameDetails, Page, SpeciesCard}; use super::helpers::SpeciesHelper; use super::specimen::SpecimenDetails; @@ -117,7 +117,7 @@ impl Taxon { let mut taxa = db.taxa.find_by_classification(&classification).await?; // sort by dataset name for some consistency - taxa.sort_by(|a, b| a.dataset.name.cmp(&b.dataset.name)); + sort_taxa_priority(&mut taxa); let taxon = taxa.first().ok_or_else(|| Error::NotFound(canonical_name))?; let details: TaxonDetails = taxon.clone().into();