This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
The following commit(s) were added to refs/heads/rocketmq-studio by this push:
new fd3a68f5 fix: report absent persisted resources on delete (#1034)
fd3a68f5 is described below
commit fd3a68f52450b563edc9439988687caeb1118a4e
Author: aias00 <[email protected]>
AuthorDate: Wed Aug 5 22:43:25 2026 -0700
fix: report absent persisted resources on delete (#1034)
---
.../rocketmq/studio/instance/acl/AclRepository.java | 4 ++--
.../rocketmq/studio/instance/acl/AclService.java | 8 ++++++--
.../instance/acl/MybatisPlusAclRepository.java | 8 ++++----
.../rocketmq/studio/ops/alert/AlertRepository.java | 2 +-
.../rocketmq/studio/ops/alert/AlertService.java | 4 +++-
.../studio/ops/alert/MybatisPlusAlertRepository.java | 4 ++--
.../rocketmq/studio/instance/acl/AclServiceTest.java | 20 ++++++++++++++++++++
.../rocketmq/studio/ops/alert/AlertServiceTest.java | 12 ++++++++++--
8 files changed, 48 insertions(+), 14 deletions(-)
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclRepository.java
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclRepository.java
index 17325b05..d1ed8aab 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclRepository.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclRepository.java
@@ -31,7 +31,7 @@ public interface AclRepository {
*/
Optional<AclRuleVO> replaceRule(AclRuleVO rule);
- void deleteRule(String id);
+ boolean deleteRule(String id);
List<AclUserVO> findUsers();
@@ -39,5 +39,5 @@ public interface AclRepository {
AclUserVO saveUser(AclUserVO user);
- void deleteUser(String id);
+ boolean deleteUser(String id);
}
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclService.java
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclService.java
index 87bb4f43..a4772e1a 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclService.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/AclService.java
@@ -67,7 +67,9 @@ public class AclService {
public void deleteRule(String id) {
log.info("Deleting ACL rule id={}", id);
- aclRepository.deleteRule(id);
+ if (!aclRepository.deleteRule(id)) {
+ throw new BusinessException(404, "ACL rule not found: " + id);
+ }
}
@@ -112,7 +114,9 @@ public class AclService {
public void deleteUser(String id) {
log.info("Deleting ACL user id={}", id);
- aclRepository.deleteUser(id);
+ if (!aclRepository.deleteUser(id)) {
+ throw new BusinessException(404, "ACL user not found: " + id);
+ }
}
/**
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/MybatisPlusAclRepository.java
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/MybatisPlusAclRepository.java
index 9ebef953..318dd6c1 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/MybatisPlusAclRepository.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/MybatisPlusAclRepository.java
@@ -82,8 +82,8 @@ public class MybatisPlusAclRepository implements
AclRepository {
}
@Override
- public void deleteRule(String id) {
- ruleMapper.deleteById(id);
+ public boolean deleteRule(String id) {
+ return ruleMapper.deleteById(id) > 0;
}
@Override
@@ -111,8 +111,8 @@ public class MybatisPlusAclRepository implements
AclRepository {
}
@Override
- public void deleteUser(String id) {
- userMapper.deleteById(id);
+ public boolean deleteUser(String id) {
+ return userMapper.deleteById(id) > 0;
}
// ── Mapping ────────────────────────────────────────────────────
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertRepository.java
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertRepository.java
index d989d42e..a7b74dcc 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertRepository.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertRepository.java
@@ -26,7 +26,7 @@ public interface AlertRepository {
boolean replaceRule(AlertRuleVO rule);
- void deleteRule(String id);
+ boolean deleteRule(String id);
List<SystemAlertVO> findAlerts(String level);
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertService.java
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertService.java
index 82c67312..c9c7ea71 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertService.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertService.java
@@ -104,7 +104,9 @@ public class AlertService {
public void deleteRule(String id) {
log.info("Deleting alert rule id={}", id);
- alertRepository.deleteRule(id);
+ if (!alertRepository.deleteRule(id)) {
+ throw ruleNotFound(id);
+ }
}
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/MybatisPlusAlertRepository.java
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/MybatisPlusAlertRepository.java
index 4aa0a9d8..b3aca288 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/ops/alert/MybatisPlusAlertRepository.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/ops/alert/MybatisPlusAlertRepository.java
@@ -72,8 +72,8 @@ public class MybatisPlusAlertRepository implements
AlertRepository {
}
@Override
- public void deleteRule(String id) {
- ruleMapper.deleteById(id);
+ public boolean deleteRule(String id) {
+ return ruleMapper.deleteById(id) > 0;
}
@Override
diff --git
a/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
b/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
index c3b82cea..739aa811 100644
---
a/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
+++
b/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
@@ -111,6 +111,7 @@ class AclServiceTest {
@Test
void deleteRuleShouldDelegateToRepository() {
+ when(aclRepository.deleteRule("rule-1")).thenReturn(true);
aclService.deleteRule("rule-1");
verify(aclRepository).deleteRule("rule-1");
@@ -310,11 +311,30 @@ class AclServiceTest {
@Test
void deleteUserShouldDelegateToRepository() {
+ when(aclRepository.deleteUser("user-1")).thenReturn(true);
aclService.deleteUser("user-1");
verify(aclRepository).deleteUser("user-1");
}
+ @Test
+ void deleteRuleShouldRejectUnknownRule() {
+ when(aclRepository.deleteRule("missing")).thenReturn(false);
+
+ assertThatThrownBy(() -> aclService.deleteRule("missing"))
+ .isInstanceOf(BusinessException.class)
+ .satisfies(ex -> assertThat(((BusinessException)
ex).getCode()).isEqualTo(404));
+ }
+
+ @Test
+ void deleteUserShouldRejectUnknownUser() {
+ when(aclRepository.deleteUser("missing")).thenReturn(false);
+
+ assertThatThrownBy(() -> aclService.deleteUser("missing"))
+ .isInstanceOf(BusinessException.class)
+ .satisfies(ex -> assertThat(((BusinessException)
ex).getCode()).isEqualTo(404));
+ }
+
@Test
void updateUserShouldRequireId() {
AclUserVO input = AclUserVO.builder()
diff --git
a/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
b/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
index 58209e02..6ca3eba6 100644
---
a/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
+++
b/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
@@ -33,7 +33,6 @@ import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -351,13 +350,22 @@ class AlertServiceTest {
@Test
void deleteRuleShouldCallRepository() {
- doNothing().when(alertRepository).deleteRule("rule-1");
+ when(alertRepository.deleteRule("rule-1")).thenReturn(true);
alertService.deleteRule("rule-1");
verify(alertRepository).deleteRule("rule-1");
}
+ @Test
+ void deleteRuleShouldRejectUnknownRule() {
+ when(alertRepository.deleteRule("missing")).thenReturn(false);
+
+ assertThatThrownBy(() -> alertService.deleteRule("missing"))
+ .isInstanceOf(BusinessException.class)
+ .satisfies(ex -> assertThat(((BusinessException)
ex).getCode()).isEqualTo(404));
+ }
+
@Test
void listAlertsShouldReturnAlertsForLevel() {
SystemAlertVO alert1 =
SystemAlertVO.builder().id("a1").level(AlertLevel.error)