diff --git a/src/main/java/org/gridsuite/studyconfig/server/controller/DiagramGridLayoutController.java b/src/main/java/org/gridsuite/studyconfig/server/controller/DiagramGridLayoutController.java index 1bb4d63..4746d0e 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/controller/DiagramGridLayoutController.java +++ b/src/main/java/org/gridsuite/studyconfig/server/controller/DiagramGridLayoutController.java @@ -14,6 +14,7 @@ import org.gridsuite.studyconfig.server.StudyConfigApi; import org.gridsuite.studyconfig.server.dto.diagramgridlayout.DiagramGridLayout; import org.gridsuite.studyconfig.server.service.DiagramGridLayoutService; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -29,6 +30,8 @@ public class DiagramGridLayoutController { private final DiagramGridLayoutService diagramGridLayoutService; + public static final String DUPLICATE_FROM = "duplicateFrom"; + @PostMapping(consumes = APPLICATION_JSON_VALUE) @Operation(summary = "Save diagram grid layout") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The newly created diagram grid layout UUID returned")}) @@ -61,4 +64,13 @@ public ResponseEntity deleteDiagramGridLayout( diagramGridLayoutService.deleteDiagramGridLayout(diagramGridLayoutUuid); return ResponseEntity.ok().build(); } + + @PostMapping(params = { DUPLICATE_FROM }) + @Operation(summary = "Duplicate diagram grid layout") + @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "The diagram grid layout is duplicated")}) + public ResponseEntity duplicateDiagramGridLayout(@RequestParam(name = DUPLICATE_FROM) UUID diagramGridLayoutUuid) { + UUID newId = diagramGridLayoutService.duplicateDiagramGridLayout(diagramGridLayoutUuid); + return ResponseEntity.status(HttpStatus.CREATED).body(newId); + } + } diff --git a/src/main/java/org/gridsuite/studyconfig/server/service/DiagramGridLayoutService.java b/src/main/java/org/gridsuite/studyconfig/server/service/DiagramGridLayoutService.java index 6530f98..78fe27f 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/service/DiagramGridLayoutService.java +++ b/src/main/java/org/gridsuite/studyconfig/server/service/DiagramGridLayoutService.java @@ -56,4 +56,13 @@ public void updateDiagramGridLayout(UUID diagramGridLayoutUuid, DiagramGridLayou diagramGridLayoutRepository.save(diagramGridLayoutEntity); } + + @Transactional + public UUID duplicateDiagramGridLayout(UUID diagramGridLayoutUuid) { + DiagramGridLayoutEntity entity = diagramGridLayoutRepository.findById(diagramGridLayoutUuid) + .orElseThrow(() -> new EntityNotFoundException("Diagram grid layout not found with id: " + diagramGridLayoutUuid)); + + DiagramGridLayoutEntity duplicate = DiagramGridLayoutMapper.toEntity(DiagramGridLayoutMapper.toDto(entity)); + return diagramGridLayoutRepository.save(duplicate).getUuid(); + } } diff --git a/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java b/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java index 7b4a933..beb1d0b 100644 --- a/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java +++ b/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java @@ -84,6 +84,20 @@ void testSaveDiagramGridLayout() throws Exception { assertThat(diagramGridLayoutToCheck).usingRecursiveComparison().isEqualTo(diagramGridLayoutToSave); } + @Test + void testDuplicateDiagramGridLayout() throws Exception { + DiagramGridLayoutEntity existing = diagramGridLayoutRepository.save(DiagramGridLayoutMapper.toEntity(createDiagramGridLayout())); + + MvcResult mockMvcResult = mockMvc.perform(post("/v1/diagram-grid-layout") + .queryParam("duplicateFrom", existing.getUuid().toString())) + .andExpect(status().isCreated()) + .andReturn(); + + UUID duplicatedUuid = objectMapper.readValue(mockMvcResult.getResponse().getContentAsString(), UUID.class); + DiagramGridLayout duplicated = diagramGridLayoutService.getByDiagramGridLayoutUuid(duplicatedUuid); + assertThat(duplicated).usingRecursiveComparison().isEqualTo(DiagramGridLayoutMapper.toDto(existing)); + } + @Test void testSaveMapGridLayout() throws Exception { DiagramGridLayout mapLayoutToSave = createMapGridLayout();