Skip to content

Commit 77e1030

Browse files
authored
Add endpoint to reorder columns in spreadsheet configuration (#31)
Signed-off-by: Ayoub LABIDI <[email protected]>
1 parent 8c79fdd commit 77e1030

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

src/main/java/org/gridsuite/studyconfig/server/controller/SpreadsheetConfigController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,14 @@ public ResponseEntity<Void> deleteColumn(
156156
return ResponseEntity.noContent().build();
157157
}
158158

159+
@PutMapping("/{id}/columns/reorder")
160+
@Operation(summary = "Reorder columns", description = "Reorders the columns of a spreadsheet configuration")
161+
@ApiResponse(responseCode = "204", description = "Columns reordered")
162+
public ResponseEntity<Void> reorderColumns(
163+
@Parameter(description = "ID of the spreadsheet config") @PathVariable UUID id,
164+
@Parameter(description = "New order of column IDs") @RequestBody List<UUID> columnOrder) {
165+
spreadsheetConfigService.reorderColumns(id, columnOrder);
166+
return ResponseEntity.noContent().build();
167+
}
168+
159169
}

src/main/java/org/gridsuite/studyconfig/server/service/SpreadsheetConfigService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,18 @@ public void deleteColumn(UUID id, UUID columnId) {
253253
spreadsheetConfigRepository.save(entity);
254254
}
255255

256+
@Transactional
257+
public void reorderColumns(UUID id, List<UUID> columnOrder) {
258+
SpreadsheetConfigEntity entity = findEntityById(id);
259+
List<ColumnEntity> columns = entity.getColumns();
260+
261+
columns.sort((c1, c2) -> {
262+
int idx1 = columnOrder.indexOf(c1.getUuid());
263+
int idx2 = columnOrder.indexOf(c2.getUuid());
264+
return Integer.compare(idx1, idx2);
265+
});
266+
}
267+
256268
private SpreadsheetConfigCollectionInfos readDefaultSpreadsheetConfigCollection() throws IOException {
257269
try (InputStream inputStream = defaultSpreadsheetConfigCollectionResource.getInputStream()) {
258270
return objectMapper.readValue(inputStream, SpreadsheetConfigCollectionInfos.class);

src/test/java/org/gridsuite/studyconfig/server/SpreadsheetConfigIntegrationTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import java.util.Arrays;
2929
import java.util.List;
3030
import java.util.UUID;
31+
import java.util.Collections;
32+
import java.util.stream.Collectors;
3133

3234
import static org.assertj.core.api.Assertions.assertThat;
3335
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
@@ -305,6 +307,39 @@ void testGetColumn() throws Exception {
305307
assertThat(column.uuid()).isEqualTo(columnId);
306308
}
307309

310+
@Test
311+
void testReorderColumns() throws Exception {
312+
SpreadsheetConfigInfos config = new SpreadsheetConfigInfos(null, "ReorderTest", SheetType.BATTERY, createColumns());
313+
UUID configId = saveAndReturnId(config);
314+
315+
// get the saved config to retrieve column UUIDs
316+
SpreadsheetConfigInfos savedConfig = getSpreadsheetConfig(configId);
317+
List<ColumnInfos> originalColumns = savedConfig.columns();
318+
assertThat(originalColumns).hasSize(4);
319+
320+
// reverse the original order
321+
List<UUID> reorderedColumnIds = originalColumns.stream()
322+
.map(ColumnInfos::uuid)
323+
.collect(Collectors.toList());
324+
Collections.reverse(reorderedColumnIds);
325+
326+
mockMvc.perform(put(URI_SPREADSHEET_CONFIG_GET_PUT + configId + URI_COLUMN_BASE + "/reorder")
327+
.content(mapper.writeValueAsString(reorderedColumnIds))
328+
.contentType(MediaType.APPLICATION_JSON))
329+
.andExpect(status().isNoContent());
330+
331+
// verify the new order
332+
SpreadsheetConfigInfos updatedConfig = getSpreadsheetConfig(configId);
333+
List<ColumnInfos> reorderedColumns = updatedConfig.columns();
334+
335+
assertThat(reorderedColumns).hasSize(originalColumns.size());
336+
337+
for (int i = 0; i < reorderedColumns.size(); i++) {
338+
assertThat(reorderedColumns.get(i).uuid())
339+
.isEqualTo(originalColumns.get(originalColumns.size() - 1 - i).uuid());
340+
}
341+
}
342+
308343
private List<ColumnInfos> createColumns() {
309344
return Arrays.asList(
310345
new ColumnInfos(null, "cust_a", ColumnType.BOOLEAN, null, "cust_b + cust_c", "[\"cust_b\", \"cust_c\"]", "idA"),

0 commit comments

Comments
 (0)