From 415a68daf37a08aab3bfd121481fc2114a6d6475 Mon Sep 17 00:00:00 2001 From: bprize15 <148106517+bprize15@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:55:02 -0400 Subject: [PATCH] change cancer type query to prioritize starts with (#346) --- .../repository/CancerTypeRepository.java | 9 ++++ .../service/CancerTypeQueryService.java | 46 +++++++------------ 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/mskcc/oncokb/curation/repository/CancerTypeRepository.java b/src/main/java/org/mskcc/oncokb/curation/repository/CancerTypeRepository.java index 47587e60c..31e5be2e2 100644 --- a/src/main/java/org/mskcc/oncokb/curation/repository/CancerTypeRepository.java +++ b/src/main/java/org/mskcc/oncokb/curation/repository/CancerTypeRepository.java @@ -29,6 +29,15 @@ public interface CancerTypeRepository extends JpaRepository, J @Query("select cancerType from CancerType cancerType left join fetch cancerType.synonyms where cancerType.id =:id") Optional findOneWithEagerRelationships(@Param("id") Long id); + @Query( + "SELECT cancerType from CancerType cancerType WHERE cancerType.mainType LIKE %:containing% OR cancerType.subtype LIKE %:containing% OR cancerType.code LIKE %:containing% ORDER BY CASE WHEN cancerType.subtype LIKE :startsWith% THEN 0 WHEN cancerType.subtype IS NULL AND cancerType.mainType LIKE :startsWith% THEN 0 ELSE 1 END" + ) + Page findAllByQueryPrioritizeStartsWith( + @Param("containing") String containing, + @Param("startsWith") String startsWith, + Pageable pageable + ); + List findAllByMainTypeIs(@Param("maintype") String mainType); List findByTumorFormIn(List tumorForms); diff --git a/src/main/java/org/mskcc/oncokb/curation/service/CancerTypeQueryService.java b/src/main/java/org/mskcc/oncokb/curation/service/CancerTypeQueryService.java index c308c92b2..5b2d37d63 100644 --- a/src/main/java/org/mskcc/oncokb/curation/service/CancerTypeQueryService.java +++ b/src/main/java/org/mskcc/oncokb/curation/service/CancerTypeQueryService.java @@ -14,7 +14,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import tech.jhipster.service.QueryService; -import tech.jhipster.service.filter.StringFilter; /** * Service for executing complex queries for {@link CancerType} entities in the database. @@ -36,13 +35,7 @@ public CancerTypeQueryService(CancerTypeRepository cancerTypeRepository) { @Transactional(readOnly = true) public Page findBySearchQuery(String query, Pageable page) { - CancerTypeCriteria cancerTypeCriteria = new CancerTypeCriteria(); - StringFilter stringFilter = new StringFilter(); - stringFilter.setContains(query); - cancerTypeCriteria.setMainType(stringFilter); - cancerTypeCriteria.setSubtype(stringFilter); - cancerTypeCriteria.setCode(stringFilter); - return findByCriteria(cancerTypeCriteria, page); + return cancerTypeRepository.findAllByQueryPrioritizeStartsWith(query, query, page); } /** @@ -119,34 +112,27 @@ protected Specification createSpecification(CancerTypeCriteria crite specification = specification.or(buildSpecification(criteria.getTumorForm(), CancerType_.tumorForm)); } if (criteria.getChildrenId() != null) { - specification = - specification.or( - buildSpecification( - criteria.getChildrenId(), - root -> root.join(CancerType_.children, JoinType.LEFT).get(CancerType_.id) - ) - ); + specification = specification.or( + buildSpecification(criteria.getChildrenId(), root -> root.join(CancerType_.children, JoinType.LEFT).get(CancerType_.id)) + ); } if (criteria.getSynonymId() != null) { - specification = - specification.or( - buildSpecification(criteria.getSynonymId(), root -> root.join(CancerType_.synonyms, JoinType.LEFT).get(Synonym_.id)) - ); + specification = specification.or( + buildSpecification(criteria.getSynonymId(), root -> root.join(CancerType_.synonyms, JoinType.LEFT).get(Synonym_.id)) + ); } if (criteria.getParentId() != null) { - specification = - specification.or( - buildSpecification(criteria.getParentId(), root -> root.join(CancerType_.parent, JoinType.LEFT).get(CancerType_.id)) - ); + specification = specification.or( + buildSpecification(criteria.getParentId(), root -> root.join(CancerType_.parent, JoinType.LEFT).get(CancerType_.id)) + ); } if (criteria.getAssociationId() != null) { - specification = - specification.or( - buildSpecification( - criteria.getAssociationId(), - root -> root.join(CancerType_.associations, JoinType.LEFT).get(Association_.id) - ) - ); + specification = specification.or( + buildSpecification( + criteria.getAssociationId(), + root -> root.join(CancerType_.associations, JoinType.LEFT).get(Association_.id) + ) + ); } } return specification;