diff --git a/src/main/java/org/breedinginsight/brapi/v2/BrAPIV2Controller.java b/src/main/java/org/breedinginsight/brapi/v2/BrAPIV2Controller.java index 5550df913..3a77527a4 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/BrAPIV2Controller.java +++ b/src/main/java/org/breedinginsight/brapi/v2/BrAPIV2Controller.java @@ -35,9 +35,11 @@ import org.breedinginsight.api.auth.ProgramSecured; import org.breedinginsight.api.auth.ProgramSecuredRoleGroup; import org.breedinginsight.api.auth.SecurityService; +import org.breedinginsight.api.model.v1.request.query.SearchRequest; import org.breedinginsight.api.model.v1.validators.QueryValid; import org.breedinginsight.brapi.v1.controller.BrapiVersion; import org.breedinginsight.brapi.v1.model.request.query.BrapiQuery; +import org.breedinginsight.brapi.v2.model.request.query.ListQuery; import org.breedinginsight.utilities.response.mappers.ListQueryMapper; import org.breedinginsight.brapi.v2.services.BrAPIGermplasmService; import org.breedinginsight.model.ProgramBrAPIEndpoints; @@ -90,10 +92,24 @@ public BrAPIServerInfoResponse serverinfo() { @Produces(MediaType.APPLICATION_JSON) @ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.ALL}) public HttpResponse getLists(@PathVariable("programId") UUID programId, HttpRequest request, - @QueryValue @QueryValid(using = ListQueryMapper.class) @Valid BrapiQuery queryParams + @QueryValue @QueryValid(using = ListQueryMapper.class) @Valid ListQuery queryParams ) throws DoesNotExistException, ApiException { - List brapiLists = germplasmService.getGermplasmListsByProgramId(programId, request); - return ResponseUtils.getBrapiQueryResponse(brapiLists, listQueryMapper, queryParams); + List brapiLists; + + if (queryParams.getListType() == null) { + // TODO: in future return all list types but for now just return germplasm + brapiLists = germplasmService.getGermplasmListsByProgramId(programId, request); + } else { + // TODO: return appropriate lists by type, only germplasm currently + switch(queryParams.getListType()) { + case "germplasm": + default: + brapiLists = germplasmService.getGermplasmListsByProgramId(programId, request); + } + } + + SearchRequest searchRequest = queryParams.constructSearchRequest(); + return ResponseUtils.getBrapiQueryResponse(brapiLists, listQueryMapper, queryParams, searchRequest); } @Get("/${micronaut.bi.api.version}/programs/{programId}" + BrapiVersion.BRAPI_V2 + "/{+path}") diff --git a/src/main/java/org/breedinginsight/brapi/v2/model/request/query/ListQuery.java b/src/main/java/org/breedinginsight/brapi/v2/model/request/query/ListQuery.java new file mode 100644 index 000000000..347ed7e2c --- /dev/null +++ b/src/main/java/org/breedinginsight/brapi/v2/model/request/query/ListQuery.java @@ -0,0 +1,47 @@ +package org.breedinginsight.brapi.v2.model.request.query; + +import io.micronaut.core.annotation.Introspected; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.breedinginsight.api.model.v1.request.query.FilterRequest; +import org.breedinginsight.api.model.v1.request.query.SearchRequest; +import org.breedinginsight.brapi.v1.model.request.query.BrapiQuery; +import org.jooq.tools.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Introspected +public class ListQuery extends BrapiQuery { + private String listType; + private String name; + private String description; + private String size; + private String dateCreated; + private String ownerName; + + public SearchRequest constructSearchRequest() { + List filters = new ArrayList<>(); + if (!StringUtils.isBlank(getListType())) { + filters.add(constructFilterRequest("type", getListType())); + } + if (!StringUtils.isBlank(getName())) { + filters.add(constructFilterRequest("name", getName())); + } + if (!StringUtils.isBlank(getDescription())) { + filters.add(constructFilterRequest("description", getDescription())); + } + if (!StringUtils.isBlank(getSize())) { + filters.add(constructFilterRequest("size", getSize())); + } + if (!StringUtils.isBlank(getDateCreated())) { + filters.add(constructFilterRequest("dateCreated", getDateCreated())); + } + if (!StringUtils.isBlank(getOwnerName())) { + filters.add(constructFilterRequest("ownerName", getOwnerName())); + } + return new SearchRequest(filters); + } +} diff --git a/src/main/java/org/breedinginsight/utilities/response/mappers/ListQueryMapper.java b/src/main/java/org/breedinginsight/utilities/response/mappers/ListQueryMapper.java index 302fe3b49..d34aa0b88 100644 --- a/src/main/java/org/breedinginsight/utilities/response/mappers/ListQueryMapper.java +++ b/src/main/java/org/breedinginsight/utilities/response/mappers/ListQueryMapper.java @@ -2,6 +2,7 @@ import lombok.Getter; import org.brapi.v2.model.core.BrAPIListSummary; +import org.brapi.v2.model.core.BrAPITrial; import org.breedinginsight.utilities.response.mappers.AbstractQueryMapper; import javax.inject.Singleton; @@ -15,7 +16,14 @@ public class ListQueryMapper extends AbstractQueryMapper { private Map> fields; public ListQueryMapper() { - fields = Map.ofEntries(); + fields = Map.ofEntries( + Map.entry("name", BrAPIListSummary::getListName), + Map.entry("description", BrAPIListSummary::getListDescription), + Map.entry("size", BrAPIListSummary::getListSize), + Map.entry("dateCreated", BrAPIListSummary::getDateCreated), + Map.entry("ownerName", BrAPIListSummary::getListOwnerName), + Map.entry("type", BrAPIListSummary::getListType) + ); } @Override