diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index 6569164c5..1128a22f8 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -149,8 +149,12 @@ public ResponseEntity getNetworkModification( @ApiResponse(responseCode = "200", description = "The network modifications were deleted") public ResponseEntity deleteNetworkModifications( @Parameter(description = "Network modification UUIDs") @RequestParam("uuids") List networkModificationUuids, - @Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid) { - networkModificationService.deleteNetworkModifications(groupUuid, networkModificationUuids); + @Parameter(description = "Group UUID") @RequestParam("groupUuid") UUID groupUuid, + @Parameter(description = "delete only stashed modifications") @RequestParam(name = "onlyStashed", required = false, defaultValue = "false") Boolean onlyStashed){ + if(!onlyStashed) + networkModificationService.deleteNetworkModifications(groupUuid, networkModificationUuids); + else + networkModificationService.deleteStashedNetworkModifications(groupUuid, networkModificationUuids);//TODO: make a unit test fot this method return ResponseEntity.ok().build(); } diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index bfb3533c3..9820e2782 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -180,6 +180,19 @@ public int deleteModifications(UUID groupUuid, List uuids) { return count; } + @Transactional // To have the find and delete in the same transaction (atomic) + public int deleteStashedModifications(UUID groupUuid, List uuids) { + ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); + List modifications = getModificationEntityStream(groupUuid) + .filter(m -> uuids.contains(m.getId())) + .filter(ModificationEntity::getStashed) + .collect(Collectors.toList()); + modifications.forEach(groupEntity::removeModification); + int count = modifications.size(); + this.modificationRepository.deleteAll(modifications); + return count; + } + private ModificationGroupEntity getModificationGroup(UUID groupUuid) { return this.modificationGroupRepository.findById(groupUuid).orElseThrow(() -> new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, groupUuid.toString())); } diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 9216a670c..dacd3d623 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -204,6 +204,12 @@ public void deleteNetworkModifications(UUID groupUuid, List modificationsU } } + public void deleteStashedNetworkModifications(UUID groupUuid, List modificationsUuids) { + if (networkModificationRepository.deleteStashedModifications(groupUuid, modificationsUuids) == 0) { + throw new NetworkModificationException(MODIFICATION_NOT_FOUND); + } + } + @Transactional public Optional moveModifications(UUID groupUuid, UUID originGroupUuid, UUID before, UUID networkUuid, String variantId, @@ -293,4 +299,5 @@ public Optional duplicateModificationsInGroup(UUID ta public void deleteStashedModificationInGroup(UUID groupUuid, boolean errorOnGroupNotFound) { networkModificationRepository.deleteStashedModificationInGroup(groupUuid, errorOnGroupNotFound); } + }