feat(群组): 添加群组解散状态支持与过滤逻辑
新增群组解散状态常量,在群组列表和详情接口中增加解散群组的过滤和报错处理,避免返回已解散的群组数据
This commit is contained in:
+10
-1
@@ -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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user