From 9695afbb0cdb6f914dde992ded135831d7592db1 Mon Sep 17 00:00:00 2001 From: Susanna Kiwala Date: Tue, 28 Jan 2025 10:08:47 -0600 Subject: [PATCH 1/2] Update short links to allow doid, ncit_id, and hpo_id --- server/app/lib/link_adaptors/phenotype.rb | 11 ++++++++++ server/app/models/frontend_router.rb | 26 ++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 server/app/lib/link_adaptors/phenotype.rb diff --git a/server/app/lib/link_adaptors/phenotype.rb b/server/app/lib/link_adaptors/phenotype.rb new file mode 100644 index 000000000..aafe600bf --- /dev/null +++ b/server/app/lib/link_adaptors/phenotype.rb @@ -0,0 +1,11 @@ +module LinkAdaptors + class Phenotype < Base + def display_name + obj.name + end + + def base_path + "/phenotypes/#{obj.id}" + end + end +end diff --git a/server/app/models/frontend_router.rb b/server/app/models/frontend_router.rb index b88634229..c3c6896d7 100644 --- a/server/app/models/frontend_router.rb +++ b/server/app/models/frontend_router.rb @@ -24,8 +24,16 @@ def url def query_info case id_type when /genes?/ - [ - Feature.where(feature_instance_type: "Features::Gene"), :feature_instance_id, + [ + Feature.where(feature_instance_type: "Features::Gene"), :id, + ] + when /fusions?/ + [ + Feature.where(feature_instance_type: "Features::Fusion"), :id, + ] + when /factors?/ + [ + Feature.where(feature_instance_type: "Features::Factor"), :id, ] when /features?/ [ Feature, :id, ] @@ -38,7 +46,7 @@ def query_info when /entrez_id/ [ Features::Gene, :entrez_id ] when /entrez_name/ - [ + [ Feature.where(feature_instance_type: "Features::Gene"), :name, -> { _1.upcase } ] when /variant_groups?/ @@ -47,10 +55,18 @@ def query_info [ Revision, :id ] when /diseases?/ [ Disease, :id ] + when /doid/ + [ Disease.where(deprecated: false), :doid, ] when /drugs?/ [ Therapy, :id ] when /therapies?/ [ Therapy, :id ] + when /ncit_id/ + [ Therapy.where(deprecated: false), :ncit_id, ] + when /phenotypes?/ + [ Phenotype, :id ] + when /hpo_id/ + [ Phenotype, :hpo_id ] when /assertions?/ [ Assertion, :id ] when /sources?/ @@ -62,8 +78,8 @@ def query_info when "AID" [ Assertion, :id ] when "GID" - [ - Feature.where(feature_instance_type: "Features::Gene"), :feature_instance_id, + [ + Feature.where(feature_instance_type: "Features::Gene"), :id, ] when "FID" [ Feature, :id ] From 4ed58e9d0cb4972b079dfffcea9e1977a987bf5b Mon Sep 17 00:00:00 2001 From: Adam Coffman Date: Tue, 28 Jan 2025 10:18:55 -0600 Subject: [PATCH 2/2] rank typeahead results by length of matched name --- .../app/graphql/types/queries/typeahead_queries.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/app/graphql/types/queries/typeahead_queries.rb b/server/app/graphql/types/queries/typeahead_queries.rb index 396f43339..c972266a0 100644 --- a/server/app/graphql/types/queries/typeahead_queries.rb +++ b/server/app/graphql/types/queries/typeahead_queries.rb @@ -81,13 +81,13 @@ def disease_typeahead(query_term:) base_query = Disease.where(deprecated: false) results = base_query.where("diseases.name ILIKE ?", "%#{query_term}%") .or(base_query.where("diseases.doid ILIKE ?", "#{query_term}%")) - #.order("LENGTH(diseases.name) ASC") + .order("LENGTH(diseases.name) ASC") .limit(10) if results.size < 10 secondary_results = base_query.eager_load(:disease_aliases) .where("disease_aliases.name ILIKE ?", "%#{query_term}%") .where.not(id: results.select('id')) - #.order("LENGTH(diseases.name) ASC") + .order("LENGTH(diseases.name) ASC") .distinct .limit(10-results.size) return results + secondary_results @@ -100,7 +100,7 @@ def therapy_typeahead(query_term:) base_query = Therapy.where(deprecated: false) results = base_query.where("therapies.name ILIKE ?", "#{query_term}%") .or(base_query.where("therapies.ncit_id ILIKE ?", "%#{query_term}%")) - #.order("LENGTH(therapies.name) ASC") + .order("LENGTH(therapies.name) ASC") .limit(10) if results.size < 10 secondary_results = base_query.where('therapies.name ILIKE ?', "%#{query_term}%") @@ -110,7 +110,7 @@ def therapy_typeahead(query_term:) tertiary_results = base_query.eager_load(:therapy_aliases) .where("therapy_aliases.name ILIKE ?", "%#{query_term}%") .where.not(id: results.select('id') + secondary_results.select('id')) - #.order("LENGTH(therapies.name) ASC") + .order("LENGTH(therapies.name) ASC") .distinct .limit(10-results.size) @@ -131,14 +131,14 @@ def feature_typeahead(query_term:, feature_type: nil) end results = base_query.where('features.name ILIKE ?', "#{query_term}%") - #.order("LENGTH(features.name) ASC") + .order("LENGTH(features.name) ASC") .limit(10) if results.size < 10 secondary_results = base_query.eager_load(:feature_aliases) .where("feature_aliases.name ILIKE ?", "#{query_term}%") .where.not(id: results.select('id')) - #.order("LENGTH(features.name) ASC") + .order("LENGTH(features.name) ASC") .distinct .limit(10 - results.size) return (results + secondary_results).uniq