From 36b105c937ff0d23fa323907a86a4e4588cbb1d1 Mon Sep 17 00:00:00 2001 From: litoral05 Date: Tue, 9 Jun 2026 17:15:45 +0100 Subject: [PATCH] stable workspace version --- .../backend/charts/ChartWorkspaceService.java | 47 ++++++++++++++----- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/litoralregas/backend/charts/ChartWorkspaceService.java b/src/main/java/com/litoralregas/backend/charts/ChartWorkspaceService.java index 7c2410a..97efa11 100644 --- a/src/main/java/com/litoralregas/backend/charts/ChartWorkspaceService.java +++ b/src/main/java/com/litoralregas/backend/charts/ChartWorkspaceService.java @@ -7,9 +7,11 @@ import com.litoralregas.backend.charts.dto.ChartWorkspaceResponse; import jakarta.transaction.Transactional; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.web.server.ResponseStatusException; import java.util.List; +import java.util.Objects; @Service public class ChartWorkspaceService { @@ -45,12 +47,14 @@ public class ChartWorkspaceService { return toResponse(saved); } + @Transactional public ChartWorkspaceResponse getWorkspace( ChartWorkspaceScope scope ) { return toResponse(getOrCreateDefaultWorkspace(scope)); } + @Transactional public List listWorkspaces( ChartWorkspaceScope scope ) { @@ -132,6 +136,10 @@ public class ChartWorkspaceService { repository.delete(workspace); if (Boolean.TRUE.equals(workspace.getDefaultWorkspace())) { + if (TransactionSynchronizationManager.isActualTransactionActive()) { + repository.flush(); + } + repository.findAllByScopeOrderBySortOrderAscIdAsc(workspace.getScope()) .stream() .findFirst() @@ -216,24 +224,39 @@ public class ChartWorkspaceService { workspace.setDefaultWorkspace(false); } - workspace.setLayoutMode( - normalizeLayoutMode(request.layoutMode()) - ); + if (request.layoutMode() != null) { + workspace.setLayoutMode( + normalizeLayoutMode(request.layoutMode()) + ); + } - workspace.setChartsJson( - normalizeChartsJson(request.chartsJson()) - ); + if (request.chartsJson() != null) { + workspace.setChartsJson( + normalizeChartsJson(request.chartsJson()) + ); + } } private void setDefaultWorkspace( ChartWorkspace workspace ) { - repository.findAllByScopeOrderBySortOrderAscIdAsc(workspace.getScope()) - .forEach(candidate -> { - if (!candidate.getId().equals(workspace.getId())) { - candidate.setDefaultWorkspace(false); - } - }); + List workspaces = + repository.findAllByScopeOrderBySortOrderAscIdAsc(workspace.getScope()); + + boolean changedCurrentDefault = false; + + for (ChartWorkspace candidate : workspaces) { + if (!Objects.equals(candidate.getId(), workspace.getId())) { + changedCurrentDefault = + changedCurrentDefault || + Boolean.TRUE.equals(candidate.getDefaultWorkspace()); + candidate.setDefaultWorkspace(false); + } + } + + if (changedCurrentDefault && TransactionSynchronizationManager.isActualTransactionActive()) { + repository.flush(); + } workspace.setDefaultWorkspace(true); }