stable workspace version

This commit is contained in:
litoral05
2026-06-09 17:15:45 +01:00
parent 6ccef04914
commit 36b105c937
@@ -7,9 +7,11 @@ import com.litoralregas.backend.charts.dto.ChartWorkspaceResponse;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
import java.util.List; import java.util.List;
import java.util.Objects;
@Service @Service
public class ChartWorkspaceService { public class ChartWorkspaceService {
@@ -45,12 +47,14 @@ public class ChartWorkspaceService {
return toResponse(saved); return toResponse(saved);
} }
@Transactional
public ChartWorkspaceResponse getWorkspace( public ChartWorkspaceResponse getWorkspace(
ChartWorkspaceScope scope ChartWorkspaceScope scope
) { ) {
return toResponse(getOrCreateDefaultWorkspace(scope)); return toResponse(getOrCreateDefaultWorkspace(scope));
} }
@Transactional
public List<ChartWorkspaceResponse> listWorkspaces( public List<ChartWorkspaceResponse> listWorkspaces(
ChartWorkspaceScope scope ChartWorkspaceScope scope
) { ) {
@@ -132,6 +136,10 @@ public class ChartWorkspaceService {
repository.delete(workspace); repository.delete(workspace);
if (Boolean.TRUE.equals(workspace.getDefaultWorkspace())) { if (Boolean.TRUE.equals(workspace.getDefaultWorkspace())) {
if (TransactionSynchronizationManager.isActualTransactionActive()) {
repository.flush();
}
repository.findAllByScopeOrderBySortOrderAscIdAsc(workspace.getScope()) repository.findAllByScopeOrderBySortOrderAscIdAsc(workspace.getScope())
.stream() .stream()
.findFirst() .findFirst()
@@ -216,24 +224,39 @@ public class ChartWorkspaceService {
workspace.setDefaultWorkspace(false); workspace.setDefaultWorkspace(false);
} }
if (request.layoutMode() != null) {
workspace.setLayoutMode( workspace.setLayoutMode(
normalizeLayoutMode(request.layoutMode()) normalizeLayoutMode(request.layoutMode())
); );
}
if (request.chartsJson() != null) {
workspace.setChartsJson( workspace.setChartsJson(
normalizeChartsJson(request.chartsJson()) normalizeChartsJson(request.chartsJson())
); );
} }
}
private void setDefaultWorkspace( private void setDefaultWorkspace(
ChartWorkspace workspace ChartWorkspace workspace
) { ) {
repository.findAllByScopeOrderBySortOrderAscIdAsc(workspace.getScope()) List<ChartWorkspace> workspaces =
.forEach(candidate -> { repository.findAllByScopeOrderBySortOrderAscIdAsc(workspace.getScope());
if (!candidate.getId().equals(workspace.getId())) {
boolean changedCurrentDefault = false;
for (ChartWorkspace candidate : workspaces) {
if (!Objects.equals(candidate.getId(), workspace.getId())) {
changedCurrentDefault =
changedCurrentDefault ||
Boolean.TRUE.equals(candidate.getDefaultWorkspace());
candidate.setDefaultWorkspace(false); candidate.setDefaultWorkspace(false);
} }
}); }
if (changedCurrentDefault && TransactionSynchronizationManager.isActualTransactionActive()) {
repository.flush();
}
workspace.setDefaultWorkspace(true); workspace.setDefaultWorkspace(true);
} }