Skip to content

Commit 3736318

Browse files
committed
add pagination support in api
1 parent de8504a commit 3736318

33 files changed

+2033
-306
lines changed

apps/model-ad/api-next/.openapi-generator/FILES

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/ComparisonToolPage
3030
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/CorrelationResultDto.java
3131
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/DataVersionDto.java
3232
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/DiseaseCorrelationDto.java
33+
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/DiseaseCorrelationsPageDto.java
3334
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/FoldChangeResultDto.java
3435
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/GeneExpressionDto.java
3536
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/GeneticInfoDto.java
@@ -39,6 +40,8 @@ src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/ModelDataDto.java
3940
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/ModelDto.java
4041
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/ModelOverviewDto.java
4142
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/ModelOverviewLinkDto.java
43+
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/ModelOverviewsPageDto.java
44+
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/PageMetadataDto.java
4245
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/SearchResultDto.java
4346
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/SexCohortDto.java
4447
src/main/java/org/sagebionetworks/model/ad/api/next/model/dto/SexDto.java

apps/model-ad/api-next/src/main/java/org/sagebionetworks/model/ad/api/next/api/DiseaseCorrelationApi.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package org.sagebionetworks.model.ad.api.next.api;
77

88
import org.sagebionetworks.model.ad.api.next.model.dto.BasicErrorDto;
9-
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationDto;
9+
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationsPageDto;
1010
import org.sagebionetworks.model.ad.api.next.model.dto.ItemFilterTypeQueryDto;
1111
import io.swagger.v3.oas.annotations.ExternalDocumentation;
1212
import io.swagger.v3.oas.annotations.Operation;
@@ -43,25 +43,27 @@ default DiseaseCorrelationApiDelegate getDelegate() {
4343

4444
/**
4545
* GET /comparison-tools/disease-correlation : Get disease correlation comparison data
46-
* Returns a list of disease correlation objects for use in comparison tools.
46+
* Returns a paginated list of disease correlation objects for use in comparison tools.
4747
*
4848
* @param category An ordered list of categories used to filter the data, where the first value is the category and the second is the subcategory. Pass each value by repeating the 'category' query parameter, e.g. ?category=category1&category=subcategoryA. (required)
4949
* @param item A list of items to filter the data by. (optional)
5050
* @param itemFilterType The type of filter to apply to the items. Possible values are 'include' or 'exclude'. (optional, default to include)
51-
* @return A list of disease correlation objects (status code 200)
51+
* @param pageNumber The page number. (optional, default to 0)
52+
* @param pageSize The number of items in a single page. (optional, default to 10)
53+
* @return A paginated response containing disease correlation objects (status code 200)
5254
* or Invalid request (status code 400)
5355
* or The specified resource was not found (status code 404)
5456
* or The request cannot be fulfilled due to an unexpected server error (status code 500)
5557
*/
5658
@Operation(
5759
operationId = "getDiseaseCorrelations",
5860
summary = "Get disease correlation comparison data",
59-
description = "Returns a list of disease correlation objects for use in comparison tools.",
61+
description = "Returns a paginated list of disease correlation objects for use in comparison tools.",
6062
tags = { "Disease Correlation" },
6163
responses = {
62-
@ApiResponse(responseCode = "200", description = "A list of disease correlation objects", content = {
63-
@Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = DiseaseCorrelationDto.class))),
64-
@Content(mediaType = "application/problem+json", array = @ArraySchema(schema = @Schema(implementation = DiseaseCorrelationDto.class)))
64+
@ApiResponse(responseCode = "200", description = "A paginated response containing disease correlation objects", content = {
65+
@Content(mediaType = "application/json", schema = @Schema(implementation = DiseaseCorrelationsPageDto.class)),
66+
@Content(mediaType = "application/problem+json", schema = @Schema(implementation = DiseaseCorrelationsPageDto.class))
6567
}),
6668
@ApiResponse(responseCode = "400", description = "Invalid request", content = {
6769
@Content(mediaType = "application/json", schema = @Schema(implementation = BasicErrorDto.class)),
@@ -83,12 +85,14 @@ default DiseaseCorrelationApiDelegate getDelegate() {
8385
produces = { "application/json", "application/problem+json" }
8486
)
8587

86-
default ResponseEntity<List<DiseaseCorrelationDto>> getDiseaseCorrelations(
88+
default ResponseEntity<DiseaseCorrelationsPageDto> getDiseaseCorrelations(
8789
@NotNull @Parameter(name = "category", description = "An ordered list of categories used to filter the data, where the first value is the category and the second is the subcategory. Pass each value by repeating the 'category' query parameter, e.g. ?category=category1&category=subcategoryA.", required = true, in = ParameterIn.QUERY) @Valid @RequestParam(value = "category", required = true) List<String> category,
8890
@Parameter(name = "item", description = "A list of items to filter the data by.", in = ParameterIn.QUERY) @Valid @RequestParam(value = "item", required = false) @Nullable List<String> item,
89-
@Parameter(name = "itemFilterType", description = "The type of filter to apply to the items. Possible values are 'include' or 'exclude'.", in = ParameterIn.QUERY) @Valid @RequestParam(value = "itemFilterType", required = false, defaultValue = "include") ItemFilterTypeQueryDto itemFilterType
91+
@Parameter(name = "itemFilterType", description = "The type of filter to apply to the items. Possible values are 'include' or 'exclude'.", in = ParameterIn.QUERY) @Valid @RequestParam(value = "itemFilterType", required = false, defaultValue = "include") ItemFilterTypeQueryDto itemFilterType,
92+
@Min(0) @Parameter(name = "pageNumber", description = "The page number.", in = ParameterIn.QUERY) @Valid @RequestParam(value = "pageNumber", required = false, defaultValue = "0") Integer pageNumber,
93+
@Min(1) @Max(1000) @Parameter(name = "pageSize", description = "The number of items in a single page.", in = ParameterIn.QUERY) @Valid @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize
9094
) {
91-
return getDelegate().getDiseaseCorrelations(category, item, itemFilterType);
95+
return getDelegate().getDiseaseCorrelations(category, item, itemFilterType, pageNumber, pageSize);
9296
}
9397

9498
}

apps/model-ad/api-next/src/main/java/org/sagebionetworks/model/ad/api/next/api/DiseaseCorrelationApiController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.sagebionetworks.model.ad.api.next.api;
22

33
import org.sagebionetworks.model.ad.api.next.model.dto.BasicErrorDto;
4-
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationDto;
4+
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationsPageDto;
55
import org.sagebionetworks.model.ad.api.next.model.dto.ItemFilterTypeQueryDto;
66

77

apps/model-ad/api-next/src/main/java/org/sagebionetworks/model/ad/api/next/api/DiseaseCorrelationApiDelegate.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.sagebionetworks.model.ad.api.next.api;
22

33
import org.sagebionetworks.model.ad.api.next.model.dto.BasicErrorDto;
4-
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationDto;
4+
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationsPageDto;
55
import org.sagebionetworks.model.ad.api.next.model.dto.ItemFilterTypeQueryDto;
66
import org.springframework.http.HttpStatus;
77
import org.springframework.http.MediaType;
@@ -30,24 +30,28 @@ default Optional<NativeWebRequest> getRequest() {
3030

3131
/**
3232
* GET /comparison-tools/disease-correlation : Get disease correlation comparison data
33-
* Returns a list of disease correlation objects for use in comparison tools.
33+
* Returns a paginated list of disease correlation objects for use in comparison tools.
3434
*
3535
* @param category An ordered list of categories used to filter the data, where the first value is the category and the second is the subcategory. Pass each value by repeating the &#39;category&#39; query parameter, e.g. ?category&#x3D;category1&amp;category&#x3D;subcategoryA. (required)
3636
* @param item A list of items to filter the data by. (optional)
3737
* @param itemFilterType The type of filter to apply to the items. Possible values are &#39;include&#39; or &#39;exclude&#39;. (optional, default to include)
38-
* @return A list of disease correlation objects (status code 200)
38+
* @param pageNumber The page number. (optional, default to 0)
39+
* @param pageSize The number of items in a single page. (optional, default to 10)
40+
* @return A paginated response containing disease correlation objects (status code 200)
3941
* or Invalid request (status code 400)
4042
* or The specified resource was not found (status code 404)
4143
* or The request cannot be fulfilled due to an unexpected server error (status code 500)
4244
* @see DiseaseCorrelationApi#getDiseaseCorrelations
4345
*/
44-
default ResponseEntity<List<DiseaseCorrelationDto>> getDiseaseCorrelations(List<String> category,
46+
default ResponseEntity<DiseaseCorrelationsPageDto> getDiseaseCorrelations(List<String> category,
4547
List<String> item,
46-
ItemFilterTypeQueryDto itemFilterType) {
48+
ItemFilterTypeQueryDto itemFilterType,
49+
Integer pageNumber,
50+
Integer pageSize) {
4751
getRequest().ifPresent(request -> {
4852
for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
4953
if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
50-
String exampleString = "[ { \"cluster\" : \"cluster\", \"DLPFC\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"sex\" : \"Female\", \"CBE\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"STG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"model_type\" : \"model_type\", \"TCX\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"modified_genes\" : [ \"modified_genes\", \"modified_genes\" ], \"FP\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"IFG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"matched_control\" : \"matched_control\", \"PHG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"name\" : \"name\", \"_id\" : \"_id\", \"age\" : \"age\" }, { \"cluster\" : \"cluster\", \"DLPFC\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"sex\" : \"Female\", \"CBE\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"STG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"model_type\" : \"model_type\", \"TCX\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"modified_genes\" : [ \"modified_genes\", \"modified_genes\" ], \"FP\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"IFG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"matched_control\" : \"matched_control\", \"PHG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"name\" : \"name\", \"_id\" : \"_id\", \"age\" : \"age\" } ]";
54+
String exampleString = "{ \"diseaseCorrelations\" : [ { \"cluster\" : \"cluster\", \"DLPFC\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"sex\" : \"Female\", \"CBE\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"STG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"model_type\" : \"model_type\", \"TCX\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"modified_genes\" : [ \"modified_genes\", \"modified_genes\" ], \"FP\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"IFG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"matched_control\" : \"matched_control\", \"PHG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"name\" : \"name\", \"_id\" : \"_id\", \"age\" : \"age\" }, { \"cluster\" : \"cluster\", \"DLPFC\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"sex\" : \"Female\", \"CBE\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"STG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"model_type\" : \"model_type\", \"TCX\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"modified_genes\" : [ \"modified_genes\", \"modified_genes\" ], \"FP\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"IFG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"matched_control\" : \"matched_control\", \"PHG\" : { \"adj_p_val\" : 6.027456183070403, \"correlation\" : 0.8008281904610115 }, \"name\" : \"name\", \"_id\" : \"_id\", \"age\" : \"age\" } ], \"page\" : { \"number\" : 0, \"size\" : 100, \"totalPages\" : 3, \"hasPrevious\" : false, \"hasNext\" : true, \"totalElements\" : 250 } }";
5155
ApiUtil.setExampleResponse(request, "application/json", exampleString);
5256
break;
5357
}

apps/model-ad/api-next/src/main/java/org/sagebionetworks/model/ad/api/next/api/DiseaseCorrelationApiDelegateImpl.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import java.util.List;
44
import java.util.Objects;
5+
import lombok.RequiredArgsConstructor;
56
import org.sagebionetworks.model.ad.api.next.exception.ErrorConstants;
67
import org.sagebionetworks.model.ad.api.next.exception.InvalidCategoryException;
7-
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationDto;
8+
import org.sagebionetworks.model.ad.api.next.model.dto.DiseaseCorrelationsPageDto;
89
import org.sagebionetworks.model.ad.api.next.model.dto.ItemFilterTypeQueryDto;
910
import org.sagebionetworks.model.ad.api.next.service.DiseaseCorrelationService;
1011
import org.sagebionetworks.model.ad.api.next.util.ApiHelper;
11-
import lombok.RequiredArgsConstructor;
1212
import org.springframework.http.MediaType;
1313
import org.springframework.http.ResponseEntity;
1414
import org.springframework.lang.Nullable;
@@ -22,10 +22,12 @@ public class DiseaseCorrelationApiDelegateImpl implements DiseaseCorrelationApiD
2222
private final DiseaseCorrelationService diseaseCorrelationService;
2323

2424
@Override
25-
public ResponseEntity<List<DiseaseCorrelationDto>> getDiseaseCorrelations(
25+
public ResponseEntity<DiseaseCorrelationsPageDto> getDiseaseCorrelations(
2626
List<String> category,
2727
@Nullable List<String> item,
28-
ItemFilterTypeQueryDto itemFilterType
28+
ItemFilterTypeQueryDto itemFilterType,
29+
Integer pageNumber,
30+
Integer pageSize
2931
) {
3032
String cluster = extractCluster(category);
3133
List<String> items = ApiHelper.sanitizeItems(item);
@@ -34,7 +36,9 @@ public ResponseEntity<List<DiseaseCorrelationDto>> getDiseaseCorrelations(
3436
ItemFilterTypeQueryDto.INCLUDE
3537
);
3638

37-
List<DiseaseCorrelationDto> results = diseaseCorrelationService.loadDiseaseCorrelations(
39+
DiseaseCorrelationsPageDto results = diseaseCorrelationService.loadDiseaseCorrelations(
40+
pageNumber,
41+
pageSize,
3842
cluster,
3943
items,
4044
effectiveFilter

0 commit comments

Comments
 (0)