feat(群组): 添加群组解散状态支持与过滤逻辑

新增群组解散状态常量,在群组列表和详情接口中增加解散群组的过滤和报错处理,避免返回已解散的群组数据
This commit is contained in:
kk123kk123
2026-09-14 20:06:41 +08:00
parent 275c9e5fcd
commit 6291fa2b60
2 changed files with 12 additions and 2 deletions
+10 -1
View File
@@ -55,6 +55,7 @@ const (
imReasonFileUnavailable = "FILE_UNAVAILABLE" imReasonFileUnavailable = "FILE_UNAVAILABLE"
imReasonRateLimited = "RATE_LIMITED" imReasonRateLimited = "RATE_LIMITED"
imReasonResourceNotFound = "RESOURCE_NOT_FOUND" imReasonResourceNotFound = "RESOURCE_NOT_FOUND"
imReasonGroupDissolved = "GROUP_DISSOLVED"
imReasonValidationFailed = "VALIDATION_FAILED" imReasonValidationFailed = "VALIDATION_FAILED"
) )
@@ -4774,7 +4775,11 @@ func serveIMGroupList(wrt http.ResponseWriter, req *http.Request) {
continue continue
} }
item := groupListItemPayload(sub) 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) item = mergeGroupListSettingsPayload(item, settings)
} }
if category != "" && groupCategory(groupMemberRole(sub.ModeGiven&sub.ModeWant)) != category { 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) payload := groupDetailPayload(group, selfSub)
if settings, err := store.GroupBusiness.GetSettings(principal.TenantID, topic); err == nil { 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) payload = mergeGroupSettingsPayload(payload, settings)
} }
writeIMSuccess(wrt, req, payload) writeIMSuccess(wrt, req, payload)
+2 -1
View File
@@ -3,7 +3,8 @@ package types
import "time" import "time"
const ( const (
GroupStatusActive = "active" GroupStatusActive = "active"
GroupStatusDissolved = "dissolved"
GroupMemberRoleOwner = "owner" GroupMemberRoleOwner = "owner"
GroupMemberRoleAdmin = "admin" GroupMemberRoleAdmin = "admin"