From e11b993eb476f6eaa83ac12bf11c155f6950f776 Mon Sep 17 00:00:00 2001 From: jamal-khey Date: Fri, 6 Oct 2023 10:51:23 +0200 Subject: [PATCH] implement delete all modifications --- .../server/NetworkModificationController.java | 8 +++--- .../server/NetworkModificationException.java | 1 + .../NetworkModificationRepository.java | 21 +++++++++++++++ .../service/NetworkModificationService.java | 11 ++++++++ .../server/ModificationControllerTest.java | 26 +++++++++++++++++++ 5 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index fbbb8b078..bb5cf2f5d 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -160,13 +160,15 @@ public ResponseEntity> getAllNetworkModification( @Operation(summary = "Delete network modifications") @ApiResponse(responseCode = "200", description = "The network modifications were deleted") public ResponseEntity deleteNetworkModifications( - @Parameter(description = "Network modification UUIDs") @RequestParam("uuids") List networkModificationUuids, + @Parameter(description = "Network modification UUIDs") @RequestParam(name = "uuids", required = false) List 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) + if(networkModificationUuids == null || networkModificationUuids.isEmpty()) + networkModificationService.deleteAllNetworkModifications(groupUuid); + else if(!onlyStashed) networkModificationService.deleteNetworkModifications(groupUuid, networkModificationUuids); else - networkModificationService.deleteStashedNetworkModifications(groupUuid, networkModificationUuids);//TODO: make a unit test fot this method + networkModificationService.deleteAllStashedNetworkModifications(groupUuid); return ResponseEntity.ok().build(); } diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java index c6296dd0e..c3e25be31 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java @@ -26,6 +26,7 @@ public enum Type { GROOVY_SCRIPT_ERROR(HttpStatus.BAD_REQUEST), NETWORK_NOT_FOUND(HttpStatus.NOT_FOUND), VARIANT_NOT_FOUND(HttpStatus.NOT_FOUND), + NOTHING_TO_DELETE(HttpStatus.BAD_REQUEST), MODIFICATION_GROUP_NOT_FOUND(HttpStatus.NOT_FOUND), MODIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND), SWITCH_NOT_FOUND(HttpStatus.NOT_FOUND), 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 eb31b93f3..018c2e242 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -187,6 +187,27 @@ public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound } } + @Transactional + public int deleteAllModifications(UUID groupUuid) { + ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); + List modifications = getModificationEntityStream(groupUuid).collect(Collectors.toList()); + modifications.forEach(groupEntity::removeModification); + int count = modifications.size(); + this.modificationRepository.deleteAll(modifications); + return count; + } + @Transactional + public int deleteAllStashedModifications(UUID groupUuid) { + ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); + List modifications = getModificationEntityStream(groupUuid) + .filter(ModificationEntity::getStashed) + .collect(Collectors.toList()); + modifications.forEach(groupEntity::removeModification); + int count = modifications.size(); + this.modificationRepository.deleteAll(modifications); + return count; + } + @Transactional // To have the find and delete in the same transaction (atomic) public int deleteModifications(UUID groupUuid, List uuids) { ModificationGroupEntity groupEntity = getModificationGroup(groupUuid); 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 383d32f52..8b929df78 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -209,6 +209,17 @@ public void stopBuildRequest(String receiver) { notificationService.emitCancelBuildMessage(receiver); } + public void deleteAllNetworkModifications(UUID groupUuid) { + if(networkModificationRepository.deleteAllModifications(groupUuid) == 0) { + throw new NetworkModificationException(NOTHING_TO_DELETE); + } + } + + public void deleteAllStashedNetworkModifications(UUID groupUuid) { + if(networkModificationRepository.deleteAllStashedModifications(groupUuid) == 0) { + throw new NetworkModificationException(NOTHING_TO_DELETE); + } + } public void deleteNetworkModifications(UUID groupUuid, List modificationsUuids) { if (networkModificationRepository.deleteModifications(groupUuid, modificationsUuids) == 0) { throw new NetworkModificationException(MODIFICATION_NOT_FOUND); diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 2494ce404..efb10e0ce 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -371,6 +371,32 @@ public void testDeleteModification() throws Exception { mockMvc.perform(delete("/v1/groups/" + TEST_GROUP_ID).queryParam("errorOnGroupNotFound", "false")).andExpect(status().isOk()); } + //test delete all modifications + @Test + public void testDeleteAllModification() throws Exception { + List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 3); + + assertEquals(3, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); + mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) + .queryParam("groupUuid", TEST_GROUP_ID.toString())) + .andExpect(status().isOk()); + assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); + } + +// @Test +// public void testDeleteAllStashedModification() throws Exception { +// List modificationList = createSomeSwitchModifications(TEST_GROUP_ID, 3); +// +// +// assertEquals(3, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); +// mockMvc.perform(delete(URI_NETWORK_MODIF_BASE) +// .queryParam("groupUuid", TEST_GROUP_ID.toString()) +// .queryParam("stashed", "true")) +// .andExpect(status().isOk()); +// assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); +// } + + @Test public void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { String uriString = URI_NETWORK_MODIF_BASE + "?networkUuid=" + TEST_NETWORK_WITH_FLUSH_ERROR_ID + URI_NETWORK_MODIF_PARAMS;