From cfc59b12ceddf6beb83129f0c8bc9582504ebd2c Mon Sep 17 00:00:00 2001 From: James Hayhurst Date: Thu, 24 Oct 2024 15:39:04 +0000 Subject: [PATCH] add credset by study fetcher --- app/models/GQLSchema.scala | 1 + app/models/entities/CredibleSet.scala | 8 ++++---- app/models/entities/GwasIndex.scala | 9 +++++++-- app/models/gql/Fetchers.scala | 15 +++++++++++++++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/models/GQLSchema.scala b/app/models/GQLSchema.scala index 4c72a468..562600b7 100644 --- a/app/models/GQLSchema.scala +++ b/app/models/GQLSchema.scala @@ -21,6 +21,7 @@ object GQLSchema { val resolvers: DeferredResolver[Backend] = DeferredResolver.fetchers( biosamplesFetcher, credibleSetFetcher, + credibleSetByStudyFetcher, l2gFetcher, targetsFetcher, drugsFetcher, diff --git a/app/models/entities/CredibleSet.scala b/app/models/entities/CredibleSet.scala index 6dd9da47..4ecb1890 100644 --- a/app/models/entities/CredibleSet.scala +++ b/app/models/entities/CredibleSet.scala @@ -101,12 +101,12 @@ object CredibleSet extends Logging { "variantId", Field( "variant", - variantIndexImp, + OptionType(variantIndexImp), description = None, resolve = r => { val variantId = r.value.variantId.getOrElse("") logger.debug(s"Finding variant index: $variantId") - DeferredValue(variantFetcher.defer(variantId)) + DeferredValue(variantFetcher.deferOpt(variantId)) } ) ) @@ -128,9 +128,9 @@ object CredibleSet extends Logging { OptionType(variantIndexImp), description = None, resolve = js => { - val id = (js.value \ "variantId").as[String] + val id = (js.value \ "variantId").asOpt[String] logger.debug(s"Finding variant for id: $id") - DeferredValue(variantFetcher.defer(id)) + DeferredValue(variantFetcher.deferOpt(id)) } ), Field( diff --git a/app/models/entities/GwasIndex.scala b/app/models/entities/GwasIndex.scala index 70b7482e..f15b50b3 100644 --- a/app/models/entities/GwasIndex.scala +++ b/app/models/entities/GwasIndex.scala @@ -1,7 +1,12 @@ package models.entities import models.Backend -import models.gql.Fetchers.{biosamplesFetcher, credibleSetFetcher, diseasesFetcher, targetsFetcher} +import models.gql.Fetchers.{ + biosamplesFetcher, + credibleSetByStudyFetcher, + diseasesFetcher, + targetsFetcher +} import play.api.Logging import play.api.libs.json.{JsValue, Json, OFormat} import models.entities.CredibleSet.{credibleSetImp, credibleSetWithoutStudyImp} @@ -234,7 +239,7 @@ object GwasIndex extends Logging { description = Some("Credible sets"), resolve = js => { val studyIdSeq = Seq((js.value \ "studyId").as[String]) - DeferredValue(credibleSetFetcher.deferSeqOpt(studyIdSeq)) + DeferredValue(credibleSetByStudyFetcher.deferSeqOpt(studyIdSeq)) } ) lazy val gwasImp: ObjectType[Backend, JsValue] = ObjectType( diff --git a/app/models/gql/Fetchers.scala b/app/models/gql/Fetchers.scala index 5bb0a872..b434796a 100644 --- a/app/models/gql/Fetchers.scala +++ b/app/models/gql/Fetchers.scala @@ -21,6 +21,7 @@ import models.{Backend, entities} import play.api.Logging import play.api.libs.json.{JsValue, __} import sangria.execution.deferred.{Fetcher, FetcherCache, FetcherConfig, HasId, SimpleFetcherCache} +import models.gql.Arguments.studyId object Fetchers extends Logging { val soTermsFetcherCache = FetcherCache.simple @@ -155,6 +156,20 @@ object Fetchers extends Logging { ) } + val credibleSetByStudyFetcherCache = FetcherCache.simple + val credibleSetByStudyFetcher: Fetcher[Backend, JsValue, JsValue, String] = { + implicit val credibleSetByStudyFetcherId: HasId[JsValue, String] = + HasId[JsValue, String](js => (js \ "studyId").as[String]) + Fetcher( + config = FetcherConfig + .maxBatchSize(entities.Configuration.batchSize) + .caching(credibleSetByStudyFetcherCache), + fetch = (ctx: Backend, ids: Seq[String]) => { + ctx.getCredibleSets(entities.CredibleSetQueryArgs(studyIds = ids), None) + } + ) + } + implicit val l2gFetcherId: HasId[L2GPredictions, String] = HasId[L2GPredictions, String](_.studyLocusId) val l2gFetcherCache = FetcherCache.simple