diff --git a/app/models/Backend.scala b/app/models/Backend.scala index 301b2817..467b801c 100644 --- a/app/models/Backend.scala +++ b/app/models/Backend.scala @@ -664,14 +664,10 @@ class Backend @Inject() (implicit } def getDrugs(ids: Seq[String]): Future[IndexedSeq[Drug]] = { - val drugIndexName = getIndexOrDefault("drug") - - logger.debug(s"querying drugs", keyValue("drug_ids", ids), keyValue("index", drugIndexName)) - - val queryTerm = Map("id.keyword" -> ids) - esRetriever - .getByIndexedQueryShould(drugIndexName, queryTerm, Pagination(0, ids.size), fromJsValue[Drug]) - .map(_.mappedHits) + val tableName = getTableWithPrefixOrDefault(defaultOTSettings.clickhouse.drug.name) + logger.debug(s"querying drugs", keyValue("ids", ids), keyValue("table", tableName)) + val query = IdsQuery(ids, "id", tableName, 0, Pagination.sizeMax) + dbRetriever.executeQuery[Drug, Query](query.query) } def getMechanismsOfAction(ids: Seq[String]): Future[IndexedSeq[MechanismsOfAction]] = { diff --git a/app/models/ElasticRetriever.scala b/app/models/ElasticRetriever.scala index 92cd11a1..5f82a36b 100644 --- a/app/models/ElasticRetriever.scala +++ b/app/models/ElasticRetriever.scala @@ -160,29 +160,6 @@ class ElasticRetriever @Inject() ( } throw new Exception(err.error.reason) - /** This fn represents a query where each kv from the map is used in a bool must. Based on the - * query asked by `getByIndexedQuery` and aggregation is applied - */ - def getByIndexedQueryMust[A, V]( - esIndex: String, - kv: Map[String, V], - pagination: Pagination, - buildF: JsValue => Option[A], - aggs: Iterable[AbstractAggregation] = Iterable.empty, - sortByField: Option[sort.FieldSort] = None, - excludedFields: Seq[String] = Seq.empty - ): Future[Results[A]] = { - // just log and execute the query - val indexQuery: IndexQuery[V] = IndexQuery(esIndex = esIndex, - kv = kv, - pagination = pagination, - aggs = aggs, - excludedFields = excludedFields - ) - val searchRequest: SearchRequest = IndexQueryMust(indexQuery) - getByIndexedQuery(searchRequest, sortByField, buildF) - } - /** This fn represents a query where each kv from the map is used in a bool 'should'. Based on the * query asked by `getByIndexedQuery` and aggregation is applied */ diff --git a/app/models/ElasticRetrieverQueryBuilders.scala b/app/models/ElasticRetrieverQueryBuilders.scala index 248d23a3..0927279b 100644 --- a/app/models/ElasticRetrieverQueryBuilders.scala +++ b/app/models/ElasticRetrieverQueryBuilders.scala @@ -35,19 +35,8 @@ case class IndexQuery[V]( excludedFields: Seq[String] = Seq.empty ) -case class IndexBoolQuery( - esIndex: String, - boolQuery: BoolQuery, - pagination: Pagination, - aggs: Iterable[AbstractAggregation] = Iterable.empty, - excludedFields: Seq[String] = Seq.empty -) - trait ElasticRetrieverQueryBuilders extends OTLogging with QueryApi { - def IndexQueryMust[V](indexQuery: IndexQuery[V]): SearchRequest = - getByIndexQueryBuilder(indexQuery, must) - def IndexQueryShould[V]( indexQuery: IndexQuery[V] ): SearchRequest = @@ -99,19 +88,4 @@ trait ElasticRetrieverQueryBuilders extends OTLogging with QueryApi { .trackTotalHits(true) .sourceExclude(indexQuery.excludedFields) } - - def BoolQueryBuilder( - indexQuery: IndexBoolQuery - ): SearchRequest = { - val limitClause = indexQuery.pagination.toES - val searchRequest: SearchRequest = search(indexQuery.esIndex) - .bool(indexQuery.boolQuery) - .start(limitClause._1) - .limit(limitClause._2) - .aggs(indexQuery.aggs) - .trackTotalHits(true) - .sourceExclude(indexQuery.excludedFields) - - searchRequest - } } diff --git a/app/models/entities/Configuration.scala b/app/models/entities/Configuration.scala index 194222bc..61bb389a 100644 --- a/app/models/entities/Configuration.scala +++ b/app/models/entities/Configuration.scala @@ -89,6 +89,7 @@ object Configuration { credibleSet: CredibleSetSettings, disease: DiseaseSettings, diseaseHPO: DbTableSettings, + drug: DbTableSettings, drugWarnings: DbTableSettings, evidence: EvidenceSettings, expression: DbTableSettings, diff --git a/app/models/entities/Drug.scala b/app/models/entities/Drug.scala index f0cd8e1f..a179f618 100644 --- a/app/models/entities/Drug.scala +++ b/app/models/entities/Drug.scala @@ -2,6 +2,7 @@ package models.entities import play.api.libs.functional.syntax.toFunctionalBuilderOps import play.api.libs.json._ +import slick.jdbc.GetResult case class IndicationReference(ids: Option[Seq[String]], source: String) @@ -42,6 +43,7 @@ case class Drug( ) object Drug { + implicit val getResult: GetResult[Drug] = GetResult(r => Json.parse(r.<<[String]).as[Drug]) implicit val linkedIdsImpW: OFormat[LinkedIds] = Json.format[models.entities.LinkedIds] implicit val indicationReferenceImpW: OFormat[IndicationReference] = Json.format[models.entities.IndicationReference] diff --git a/conf/application.conf b/conf/application.conf index c4ef05f8..1e10f7f1 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -48,6 +48,10 @@ ot { label = "Disease phenotype table" name = "disease_hpo" } + drug { + label = "Drug table" + name = "drug" + } drugWarnings { label = "Drug warnings table" name = "drug_warnings"