From 1f56711fd281fcc1f7957adcfc500ab4c69fd8a4 Mon Sep 17 00:00:00 2001 From: Jason Loux Date: Thu, 2 Jul 2026 15:26:54 -0400 Subject: [PATCH] Fix issues where bi-generated exref id used instead of trialDbId in brapi endpoints --- .../brapi/v2/dao/BrAPIObservationUnitDAO.java | 9 ++------- .../services/BrAPIObservationVariableService.java | 5 ++--- ...APIObservationUnitControllerIntegrationTest.java | 13 +++++++------ 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIObservationUnitDAO.java b/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIObservationUnitDAO.java index 76acb8076..370d398d5 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIObservationUnitDAO.java +++ b/src/main/java/org/breedinginsight/brapi/v2/dao/BrAPIObservationUnitDAO.java @@ -288,7 +288,7 @@ public List getObservationUnits(Program program, BrAPIObservationUnitSearchRequest observationUnitSearchRequest = new BrAPIObservationUnitSearchRequest(); observationUnitSearchRequest.programDbIds(List.of(program.getBrapiProgram() .getProgramDbId())); - //TODO add pagination support + //TODO add pagination support: This should be easy to implement with BrAPIDAOUtil.simpleSearch() // .page(page) // .pageSize(pageSize); @@ -303,16 +303,15 @@ public List getObservationUnits(Program program, observationUnitName.ifPresent(name -> observationUnitSearchRequest.setObservationUnitNames(List.of(Utilities.appendProgramKey(name, program.getKey())))); locationDbId.ifPresent(dbid -> observationUnitSearchRequest.setLocationDbIds(List.of(dbid))); seasonDbId.ifPresent(dbid -> observationUnitSearchRequest.setSeasonDbIds(List.of(dbid))); + experimentId.ifPresent(dbId -> observationUnitSearchRequest.setTrialDbIds(List.of(dbId))); includeObservations.ifPresent(observationUnitSearchRequest::includeObservations); addLevelFilter(observationUnitLevelName, observationUnitLevelOrder, observationUnitLevelCode, level, levelFilter); addLevelFilter(observationUnitLevelRelationshipName, observationUnitLevelRelationshipOrder, observationUnitLevelRelationshipCode, relationship, relationshipFilter); - experimentId.ifPresent(expId -> addXRefFilter(expId, ExternalReferenceSource.TRIALS, xrefIds, xrefSources)); environmentId.ifPresent(envId -> addXRefFilter(envId, ExternalReferenceSource.STUDIES, xrefIds, xrefSources)); // germplasmId.ifPresent(germId -> { // xrefIds.add(germId); // xrefSources.add(Utilities.generateReferenceSource(referenceSource, ExternalReferenceSource.)); // }); - if(!xrefIds.isEmpty()) { observationUnitSearchRequest.externalReferenceIDs(xrefIds); } @@ -326,10 +325,6 @@ public List getObservationUnits(Program program, .get() .getReferenceId())) .orElse(true); - matches = matches && experimentId.map(id -> id.equals(Utilities.getExternalReference(ou.getExternalReferences(), Utilities.generateReferenceSource(referenceSource, ExternalReferenceSource.TRIALS)) - .get() - .getReferenceId())) - .orElse(true); matches = matches && environmentId.map(id -> id.equals(Utilities.getExternalReference(ou.getExternalReferences(), Utilities.generateReferenceSource(referenceSource, ExternalReferenceSource.STUDIES)) .get() .getReferenceId())) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIObservationVariableService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIObservationVariableService.java index 96a21cd14..1359a760d 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIObservationVariableService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPIObservationVariableService.java @@ -74,10 +74,9 @@ public List getBrAPIObservationVariablesForExperiment( expId = UUID.fromString(experimentId.get()); } else { UUID envId = UUID.fromString(environmentId.orElseThrow(() -> new IllegalStateException("no environment id found"))); + // TODO: Double check this (and other studyDbId bi-brapi) lookup still works with cache removal on studies [BI-2962] BrAPIStudy environment = trialService.getEnvironment(program.get(), envId); - expId = UUID.fromString(Utilities.getExternalReference(environment.getExternalReferences(), - Utilities.generateReferenceSource(referenceSource, ExternalReferenceSource.TRIALS)) - .orElseThrow(() -> new IllegalStateException("no external reference found")).getReferenceId()); + expId = UUID.fromString(environment.getTrialDbId()); } BrAPITrial experiment = trialService.getExperiment(program.get(), expId); diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java index 44792ea64..de876c626 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java @@ -31,6 +31,7 @@ import io.reactivex.Flowable; import lombok.SneakyThrows; import org.brapi.v2.model.BrAPIExternalReference; +import org.brapi.v2.model.core.BrAPITrial; import org.brapi.v2.model.germ.BrAPIGermplasm; import org.brapi.v2.model.pheno.BrAPIObservationUnit; import org.brapi.v2.model.pheno.response.BrAPIObservationUnitSingleResponse; @@ -41,8 +42,10 @@ import org.breedinginsight.api.model.v1.request.SpeciesRequest; import org.breedinginsight.api.v1.controller.TestTokenValidator; import org.breedinginsight.brapi.v2.dao.BrAPIGermplasmDAO; +import org.breedinginsight.brapi.v2.dao.BrAPITrialDAO; import org.breedinginsight.brapps.importer.ImportTestUtils; import org.breedinginsight.brapps.importer.model.imports.experimentObservation.ExperimentObservation; +import org.breedinginsight.brapps.importer.services.processors.experiment.service.TrialService; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; import org.breedinginsight.daos.SpeciesDAO; @@ -91,6 +94,8 @@ public class BrAPIObservationUnitControllerIntegrationTest extends BrAPITest { private OntologyService ontologyService; @Inject private BrAPIGermplasmDAO germplasmDAO; + @Inject + private BrAPITrialDAO brapiTrialDAO; @Inject @Client("/${micronaut.bi.api.version}") @@ -195,12 +200,8 @@ void setup() throws Exception { program, mappingId, newExperimentWorkflowId); - experimentId = importResult - .get("preview").getAsJsonObject() - .get("rows").getAsJsonArray() - .get(0).getAsJsonObject() - .get("trial").getAsJsonObject() - .get("id").getAsString(); + List trials = brapiTrialDAO.getTrials(program.getId()); + experimentId = trials.get(0).getTrialDbId(); // Add environmentIds. envIds.add(getEnvId(importResult, 0)); envIds.add(getEnvId(importResult, 1));