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)

Reply via email to