Skip to content
This repository was archived by the owner on Aug 1, 2025. It is now read-only.

Commit a07aa4e

Browse files
committed
add batchDeleteDbId query param to GET endpoints for lists, trials, samples
1 parent 1d4a768 commit a07aa4e

File tree

9 files changed

+91
-21
lines changed

9 files changed

+91
-21
lines changed

src/main/java/io/swagger/api/core/ListsApi.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public interface ListsApi {
4040
@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
4141
@RequestMapping(value = "/lists", produces = { "application/json" }, method = RequestMethod.GET)
4242
ResponseEntity<ListsListResponse> listsGet(
43+
@ApiParam(value = "batchDeleteDbId") @Valid @RequestParam(value = "batchDeleteDbId", required = false) String batchDelete,
4344
@ApiParam(value = "listType") @Valid @RequestParam(value = "listType", required = false) String listType,
4445
@ApiParam(value = "listName") @Valid @RequestParam(value = "listName", required = false) String listName,
4546
@ApiParam(value = "listDbId") @Valid @RequestParam(value = "listDbId", required = false) String listDbId,
@@ -69,7 +70,7 @@ ResponseEntity<ListsSingleResponse> listsListDbIdGet(
6970

7071
@ApiOperation(value = "Delete an existing generic list", nickname = "listsListDbIdDelete", notes = "Delete an existing generic list", response = ListsListResponse.class, authorizations = {
7172
@Authorization(value = "AuthorizationToken") }, tags = { "Lists", })
72-
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = ListsSingleResponse.class),
73+
@ApiResponses(value = { @ApiResponse(code = 204, message = "OK", response = ListsSingleResponse.class),
7374
@ApiResponse(code = 400, message = "Bad Request", response = String.class),
7475
@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
7576
@ApiResponse(code = 403, message = "Forbidden", response = String.class),

src/main/java/io/swagger/api/core/TrialsApi.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public interface TrialsApi {
3434
@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
3535
@RequestMapping(value = "/trials", produces = { "application/json" }, method = RequestMethod.GET)
3636
ResponseEntity<TrialListResponse> trialsGet(
37+
@ApiParam(value = "batchDeleteDbId") @Valid @RequestParam(value = "batchDeleteDbId", required = false) String batchDelete,
3738
@ApiParam(value = "active") @Valid @RequestParam(value = "active", required = false) Boolean active,
3839
@ApiParam(value = "commonCropName") @Valid @RequestParam(value = "commonCropName", required = false) String commonCropName,
3940
@ApiParam(value = "contactDbId") @Valid @RequestParam(value = "contactDbId", required = false) String contactDbId,

src/main/java/io/swagger/api/geno/SamplesApi.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public interface SamplesApi {
3838
@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
3939
@RequestMapping(value = "/samples", produces = { "application/json" }, method = RequestMethod.GET)
4040
ResponseEntity<SampleListResponse> samplesGet(
41+
@ApiParam(value = "batchDeleteDbId") @Valid @RequestParam(value = "batchDeleteDbId", required = false) String batchDelete,
4142
@ApiParam(value = "sampleDbId") @Valid @RequestParam(value = "sampleDbId", required = false) String sampleDbId,
4243
@ApiParam(value = "sampleName") @Valid @RequestParam(value = "sampleName", required = false) String sampleName,
4344
@ApiParam(value = "sampleGroupDbId") @Valid @RequestParam(value = "sampleGroupDbId", required = false) String sampleGroupDbId,

src/main/java/org/brapi/test/BrAPITestServer/controller/core/ListsApiController.java

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

33
import io.swagger.model.BrAPIResponse;
44
import io.swagger.model.Metadata;
5-
import io.swagger.model.core.ListDetails;
6-
import io.swagger.model.core.ListNewRequest;
7-
import io.swagger.model.core.ListResponse;
8-
import io.swagger.model.core.ListSearchRequest;
9-
import io.swagger.model.core.ListSummary;
10-
import io.swagger.model.core.ListTypes;
11-
import io.swagger.model.core.ListsListResponse;
12-
import io.swagger.model.core.ListsListResponseResult;
13-
import io.swagger.model.core.ListsSingleResponse;
5+
import io.swagger.model.core.*;
146
import io.swagger.api.core.ListsApi;
157

168
import org.apache.http.HttpResponse;
179
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerDbIdNotFoundException;
1810
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
11+
import org.brapi.test.BrAPITestServer.factory.BrAPIComponent;
1912
import org.brapi.test.BrAPITestServer.model.entity.SearchRequestEntity;
2013
import org.brapi.test.BrAPITestServer.model.entity.SearchRequestEntity.SearchRequestTypes;
2114
import org.brapi.test.BrAPITestServer.service.SearchService;
@@ -57,6 +50,7 @@ public ListsApiController(ListService listService, SearchService searchService,
5750
@CrossOrigin
5851
@Override
5952
public ResponseEntity<ListsListResponse> listsGet(
53+
@Valid @RequestParam(value = "batchDeleteDbId", required = false) String batchDeleteDbId,
6054
@Valid @RequestParam(value = "listType", required = false) String listType,
6155
@Valid @RequestParam(value = "listName", required = false) String listName,
6256
@Valid @RequestParam(value = "listDbId", required = false) String listDbId,
@@ -75,6 +69,13 @@ public ResponseEntity<ListsListResponse> listsGet(
7569
validateSecurityContext(request, "ROLE_ANONYMOUS", "ROLE_USER");
7670
validateAcceptHeader(request);
7771
Metadata metadata = generateMetaDataTemplate(page, pageSize);
72+
73+
// If a batch delete dbId is given then get the referenced lists, ignoring all other query params except pagination
74+
if (batchDeleteDbId != null) {
75+
List<ListSummary> batchDeleteData = listService.findBatchDeleteLists(batchDeleteDbId, metadata);
76+
return responseOK(new ListsListResponse(), new ListsListResponseResult(), batchDeleteData, metadata);
77+
}
78+
7879
List<ListSummary> data = listService.findLists(ListTypes.fromValue(listType), listName, listDbId, listSource, programDbId, commonCropName, externalReferenceId, externalReferenceID, externalReferenceSource, metadata);
7980
return responseOK(new ListsListResponse(), new ListsListResponseResult(), data, metadata);
8081
}

src/main/java/org/brapi/test/BrAPITestServer/controller/core/TrialsApiController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public TrialsApiController(TrialService trialService, SearchService searchServic
4343
@CrossOrigin
4444
@Override
4545
public ResponseEntity<TrialListResponse> trialsGet(
46+
@Valid @RequestParam(value = "batchDeleteDbId", required = false) String batchDeleteDbId,
4647
@Valid @RequestParam(value = "active", required = false) Boolean active,
4748
@Valid @RequestParam(value = "commonCropName", required = false) String commonCropName,
4849
@Valid @RequestParam(value = "contactDbId", required = false) String contactDbId,
@@ -68,6 +69,13 @@ public ResponseEntity<TrialListResponse> trialsGet(
6869
validateSecurityContext(request, "ROLE_ANONYMOUS", "ROLE_USER");
6970
validateAcceptHeader(request);
7071
Metadata metadata = generateMetaDataTemplate(page, pageSize);
72+
73+
// If a batch delete dbId is given then get the referenced trials, ignoring all other query params except pagination
74+
if (batchDeleteDbId != null) {
75+
List<Trial> batchDeleteData = trialService.findBatchDeleteTrials(batchDeleteDbId, metadata);
76+
return responseOK(new TrialListResponse(), new TrialListResponseResult(), batchDeleteData, metadata);
77+
}
78+
7179
List<Trial> data = trialService.findTrials(commonCropName, contactDbId, programDbId, locationDbId,
7280
DateUtility.toLocalDate(searchDateRangeStart), DateUtility.toLocalDate(searchDateRangeEnd), studyDbId, trialDbId, trialName, trialPUI,
7381
externalReferenceId, externalReferenceID, externalReferenceSource, active, sortBy, sortOrder, metadata);

src/main/java/org/brapi/test/BrAPITestServer/controller/geno/SamplesApiController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public SamplesApiController(SampleService sampleService, SearchService searchSer
5151
@CrossOrigin
5252
@Override
5353
public ResponseEntity<SampleListResponse> samplesGet(
54+
@Valid @RequestParam(value = "batchDeleteDbId", required = false) String batchDeleteDbId,
5455
@RequestParam(value = "sampleDbId", required = false) String sampleDbId,
5556
@RequestParam(value = "sampleName", required = false) String sampleName,
5657
@RequestParam(value = "sampleGroupDbId", required = false) String sampleGroupDbId,
@@ -74,6 +75,13 @@ public ResponseEntity<SampleListResponse> samplesGet(
7475
validateSecurityContext(request, "ROLE_ANONYMOUS", "ROLE_USER");
7576
validateAcceptHeader(request);
7677
Metadata metadata = generateMetaDataTemplate(page, pageSize);
78+
79+
// If a batch delete dbId is given then get the referenced sampless, ignoring all other query params except pagination
80+
if (batchDeleteDbId != null) {
81+
List<Sample> batchDeleteData = sampleService.findBatchDeleteSamples(batchDeleteDbId, metadata);
82+
return responseOK(new SampleListResponse(), new SampleListResponseResult(), batchDeleteData, metadata);
83+
}
84+
7785
List<Sample> data = sampleService.findSamples(sampleDbId, sampleName, sampleGroupDbId, observationUnitDbId,
7886
plateDbId, plateName, germplasmDbId, studyDbId, trialDbId, commonCropName, programDbId,
7987
externalReferenceId, externalReferenceID, externalReferenceSource, metadata);

src/main/java/org/brapi/test/BrAPITestServer/service/core/ListService.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.swagger.model.Metadata;
44
import io.swagger.model.core.*;
55
import jakarta.validation.Valid;
6+
import org.brapi.test.BrAPITestServer.exceptions.BatchDeleteWrongTypeException;
67
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerDbIdNotFoundException;
78
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
89
import org.brapi.test.BrAPITestServer.model.entity.core.ListEntity;
@@ -27,10 +28,27 @@ public class ListService {
2728

2829
private final ListRepository listRepository;
2930
private final PeopleService peopleService;
31+
private final BatchService batchService;
3032

31-
public ListService(ListRepository listRepository, PeopleService peopleService) {
33+
public ListService(ListRepository listRepository, PeopleService peopleService, BatchService batchService) {
3234
this.listRepository = listRepository;
3335
this.peopleService = peopleService;
36+
this.batchService = batchService;
37+
}
38+
39+
public List<ListSummary> findBatchDeleteLists(String batchDeleteDbId, Metadata metadata) throws BrAPIServerException {
40+
// Get the batch delete
41+
BatchDetails details = batchService.getBatch(batchDeleteDbId);
42+
43+
// Can't process if the batch does not reference lists
44+
if (!BatchTypes.LISTS.equals(details.getBatchType())) {
45+
throw new BatchDeleteWrongTypeException(BatchTypes.LISTS, details.getBatchType(), batchDeleteDbId, HttpStatus.BAD_REQUEST);
46+
}
47+
48+
// Get the list summaries referenced in the batch delete
49+
ListSearchRequest request = new ListSearchRequest();
50+
details.getData().forEach(request::addListDbIdsItem);
51+
return findLists(request, metadata);
3452
}
3553

3654
public List<ListSummary> findLists(ListTypes listType, String listName, String listDbId, String listSource,

src/main/java/org/brapi/test/BrAPITestServer/service/core/TrialService.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import java.util.Optional;
77
import java.util.stream.Collectors;
88

9+
import io.swagger.model.core.*;
910
import jakarta.validation.Valid;
1011

12+
import org.brapi.test.BrAPITestServer.exceptions.BatchDeleteWrongTypeException;
1113
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerDbIdNotFoundException;
1214
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
1315
import org.brapi.test.BrAPITestServer.model.entity.core.CropEntity;
@@ -27,28 +29,37 @@
2729
import java.time.LocalDate;
2830

2931
import io.swagger.model.Metadata;
30-
import io.swagger.model.core.Contact;
31-
import io.swagger.model.core.SortBy;
32-
import io.swagger.model.core.SortOrder;
33-
import io.swagger.model.core.Trial;
34-
import io.swagger.model.core.TrialNewRequest;
35-
import io.swagger.model.core.TrialNewRequestDatasetAuthorships;
36-
import io.swagger.model.core.TrialNewRequestPublications;
37-
import io.swagger.model.core.TrialSearchRequest;
3832

3933
@Service
4034
public class TrialService {
4135
private final TrialRepository trialRepository;
4236
private final PeopleService peopleService;
4337
private final ProgramService programService;
4438
private final CropService cropService;
39+
private final BatchService batchService;
4540

4641
public TrialService(TrialRepository trialRepository, PeopleService peopleService, ProgramService programService,
47-
CropService cropService) {
42+
CropService cropService, BatchService batchService) {
4843
this.trialRepository = trialRepository;
4944
this.peopleService = peopleService;
5045
this.programService = programService;
5146
this.cropService = cropService;
47+
this.batchService = batchService;
48+
}
49+
50+
public List<Trial> findBatchDeleteTrials(String batchDeleteDbId, Metadata metadata) throws BrAPIServerException {
51+
// Get the batch delete
52+
BatchDetails details = batchService.getBatch(batchDeleteDbId);
53+
54+
// Can't process if the batch does not reference trials
55+
if (!BatchTypes.TRIALS.equals(details.getBatchType())) {
56+
throw new BatchDeleteWrongTypeException(BatchTypes.TRIALS, details.getBatchType(), batchDeleteDbId, HttpStatus.BAD_REQUEST);
57+
}
58+
59+
// Get the trials referenced in the batch delete
60+
TrialSearchRequest request = new TrialSearchRequest();
61+
details.getData().forEach(request::addTrialDbIdsItem);
62+
return findTrials(request, metadata);
5263
}
5364

5465
public List<Trial> findTrials(@Valid String commonCropName, @Valid String contactDbId, @Valid String programDbId,

src/main/java/org/brapi/test/BrAPITestServer/service/geno/SampleService.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
import java.util.Optional;
88
import java.util.Map.Entry;
99

10+
import io.swagger.model.core.BatchDetails;
11+
import io.swagger.model.core.BatchTypes;
1012
import jakarta.validation.Valid;
1113

14+
import org.brapi.test.BrAPITestServer.exceptions.BatchDeleteWrongTypeException;
1215
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerDbIdNotFoundException;
1316
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
1417
import org.brapi.test.BrAPITestServer.model.entity.core.ProgramEntity;
@@ -21,6 +24,7 @@
2124
import org.brapi.test.BrAPITestServer.service.DateUtility;
2225
import org.brapi.test.BrAPITestServer.service.PagingUtility;
2326
import org.brapi.test.BrAPITestServer.service.SearchQueryBuilder;
27+
import org.brapi.test.BrAPITestServer.service.core.BatchService;
2428
import org.brapi.test.BrAPITestServer.service.core.ProgramService;
2529
import org.brapi.test.BrAPITestServer.service.core.StudyService;
2630
import org.brapi.test.BrAPITestServer.service.core.TrialService;
@@ -46,16 +50,33 @@ public class SampleService {
4650
private final StudyService studyService;
4751
private final TrialService trialService;
4852
private final ProgramService programService;
53+
private final BatchService batchService;
4954

5055
@Autowired
5156
public SampleService(SampleRepository sampleRepository, PlateService plateService, StudyService studyService,
52-
TrialService trialService, ProgramService programService, ObservationUnitService observationUnitservice) {
57+
TrialService trialService, ProgramService programService, ObservationUnitService observationUnitservice, BatchService batchService) {
5358
this.sampleRepository = sampleRepository;
5459
this.observationUnitservice = observationUnitservice;
5560
this.plateService = plateService;
5661
this.studyService = studyService;
5762
this.trialService = trialService;
5863
this.programService = programService;
64+
this.batchService = batchService;
65+
}
66+
67+
public List<Sample> findBatchDeleteSamples(String batchDeleteDbId, Metadata metadata) throws BrAPIServerException {
68+
// Get the batch delete
69+
BatchDetails details = batchService.getBatch(batchDeleteDbId);
70+
71+
// Can't process if the batch does not reference samples
72+
if (!BatchTypes.SAMPLES.equals(details.getBatchType())) {
73+
throw new BatchDeleteWrongTypeException(BatchTypes.SAMPLES, details.getBatchType(), batchDeleteDbId, HttpStatus.BAD_REQUEST);
74+
}
75+
76+
// Get the list summaries referenced in the batch delete
77+
SampleSearchRequest request = new SampleSearchRequest();
78+
details.getData().forEach(request::addSampleDbIdsItem);
79+
return findSamples(request, metadata);
5980
}
6081

6182
public List<Sample> findSamples(String sampleDbId, String sampleName, String sampleGroupDbId,

0 commit comments

Comments
 (0)