From 6291fa2b60eb040ab7e6ca3ed72f4cb65c5d7ef8 Mon Sep 17 00:00:00 2001 From: kk123kk123 <47802891+kk123kk123@users.noreply.github.com> Date: Mon, 14 Sep 2026 20:06:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=BE=A4=E7=BB=84):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BE=A4=E7=BB=84=E8=A7=A3=E6=95=A3=E7=8A=B6=E6=80=81=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=B8=8E=E8=BF=87=E6=BB=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增群组解散状态常量,在群组列表和详情接口中增加解散群组的过滤和报错处理,避免返回已解散的群组数据 --- server/im_http.go | 11 ++++++++++- server/store/types/groups.go | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/server/im_http.go b/server/im_http.go index 5a8f7b1..9a37297 100644 --- a/server/im_http.go +++ b/server/im_http.go @@ -55,6 +55,7 @@ const ( imReasonFileUnavailable = "FILE_UNAVAILABLE" imReasonRateLimited = "RATE_LIMITED" imReasonResourceNotFound = "RESOURCE_NOT_FOUND" + imReasonGroupDissolved = "GROUP_DISSOLVED" imReasonValidationFailed = "VALIDATION_FAILED" ) @@ -4774,7 +4775,11 @@ func serveIMGroupList(wrt http.ResponseWriter, req *http.Request) { continue } item := groupListItemPayload(sub) - if settings, err := store.GroupBusiness.GetSettings(principal.TenantID, sub.Topic); err == nil { + if settings, err := store.GroupBusiness.GetSettings(principal.TenantID, sub.Topic); err == nil && settings != nil { + if settings.GroupStatus == types.GroupStatusDissolved { + // Defensive check: hide dissolved groups even if their subscription cleanup lagged. + continue + } item = mergeGroupListSettingsPayload(item, settings) } if category != "" && groupCategory(groupMemberRole(sub.ModeGiven&sub.ModeWant)) != category { @@ -5083,6 +5088,10 @@ func serveIMGroupDetail(wrt http.ResponseWriter, req *http.Request, topic string } payload := groupDetailPayload(group, selfSub) if settings, err := store.GroupBusiness.GetSettings(principal.TenantID, topic); err == nil { + if settings != nil && settings.GroupStatus == types.GroupStatusDissolved { + writeIMError(wrt, req, http.StatusGone, 30004, imReasonGroupDissolved, "group dissolved", map[string]any{"topic": topic}) + return + } payload = mergeGroupSettingsPayload(payload, settings) } writeIMSuccess(wrt, req, payload) diff --git a/server/store/types/groups.go b/server/store/types/groups.go index 7cd174c..b51c0e6 100644 --- a/server/store/types/groups.go +++ b/server/store/types/groups.go @@ -3,7 +3,8 @@ package types import "time" const ( - GroupStatusActive = "active" + GroupStatusActive = "active" + GroupStatusDissolved = "dissolved" GroupMemberRoleOwner = "owner" GroupMemberRoleAdmin = "admin"