fix: resolve im backend issue list regressions
This commit is contained in:
+56
-9
@@ -1760,6 +1760,9 @@ func (groupBusinessMapper) GetSettings(tenantID types.TenantID, topic string) (*
|
||||
var cached types.GroupSettings
|
||||
if ok, err := GetCachedObject(tenantID, cacheNamespaceGroupSettings, topic, &cached); err != nil {
|
||||
logs.Warn.Printf("cache group settings[%s]: read failed: %v", topic, err)
|
||||
if delErr := DeleteCachedObject(tenantID, cacheNamespaceGroupSettings, topic); delErr != nil {
|
||||
logs.Warn.Printf("cache group settings[%s]: delete corrupted cache failed: %v", topic, delErr)
|
||||
}
|
||||
} else if ok {
|
||||
return &cached, nil
|
||||
}
|
||||
@@ -1874,15 +1877,51 @@ func (groupBusinessMapper) ListMembers(tenantID types.TenantID, topic string, op
|
||||
if opts.Limit <= 0 || opts.Limit > 100 {
|
||||
opts.Limit = 30
|
||||
}
|
||||
topic = strings.TrimSpace(topic)
|
||||
opts.Role = strings.TrimSpace(opts.Role)
|
||||
opts.EligibleRole = strings.TrimSpace(opts.EligibleRole)
|
||||
opts.Query = strings.TrimSpace(opts.Query)
|
||||
opts.Cursor = strings.TrimSpace(opts.Cursor)
|
||||
cacheKey := groupMemberPageCacheID(topic, opts)
|
||||
if cached, ok := GetCachedGroupMemberPage(tenantID, cacheKey); ok {
|
||||
return cached.Items, cached.NextCursor, nil
|
||||
}
|
||||
tenantAdp, err := tenantBusinessAdapter(tenantID)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
return tenantAdp.TenantGroupMemberList(tenantID, strings.TrimSpace(topic), opts)
|
||||
members, nextCursor, err := tenantAdp.TenantGroupMemberList(tenantID, topic, opts)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
CacheGroupMemberPage(tenantID, cacheKey, groupMemberPageCache{
|
||||
Items: members,
|
||||
NextCursor: nextCursor,
|
||||
})
|
||||
return members, nextCursor, nil
|
||||
}
|
||||
|
||||
func CacheGroupMemberPage(tenantID types.TenantID, key string, payload map[string]any) {
|
||||
if strings.TrimSpace(key) == "" || payload == nil {
|
||||
type groupMemberPageCache struct {
|
||||
Items []types.GroupMember `json:"items"`
|
||||
NextCursor string `json:"next_cursor"`
|
||||
}
|
||||
|
||||
func groupMemberPageCacheID(topic string, opts types.GroupMemberListOptions) string {
|
||||
limit := opts.Limit
|
||||
if limit <= 0 || limit > 100 {
|
||||
limit = 30
|
||||
}
|
||||
return strings.TrimSpace(topic) +
|
||||
"|role=" + strconv.Quote(strings.TrimSpace(opts.Role)) +
|
||||
"|eligible_role=" + strconv.Quote(strings.TrimSpace(opts.EligibleRole)) +
|
||||
"|query=" + strconv.Quote(strings.TrimSpace(opts.Query)) +
|
||||
"|cursor=" + strconv.Quote(strings.TrimSpace(opts.Cursor)) +
|
||||
"|limit=" + strconv.Itoa(limit) +
|
||||
"|mentionable=" + strconv.FormatBool(opts.Mentionable)
|
||||
}
|
||||
|
||||
func CacheGroupMemberPage(tenantID types.TenantID, key string, payload groupMemberPageCache) {
|
||||
if strings.TrimSpace(key) == "" {
|
||||
return
|
||||
}
|
||||
if err := CacheObject(tenantID, cacheNamespaceGroupPage, strings.TrimSpace(key), payload); err != nil {
|
||||
@@ -1890,17 +1929,17 @@ func CacheGroupMemberPage(tenantID types.TenantID, key string, payload map[strin
|
||||
}
|
||||
}
|
||||
|
||||
func GetCachedGroupMemberPage(tenantID types.TenantID, key string) (map[string]any, bool) {
|
||||
func GetCachedGroupMemberPage(tenantID types.TenantID, key string) (groupMemberPageCache, bool) {
|
||||
if strings.TrimSpace(key) == "" {
|
||||
return nil, false
|
||||
return groupMemberPageCache{}, false
|
||||
}
|
||||
var payload map[string]any
|
||||
var payload groupMemberPageCache
|
||||
if ok, err := GetCachedObject(tenantID, cacheNamespaceGroupPage, strings.TrimSpace(key), &payload); err != nil {
|
||||
logs.Warn.Printf("cache group member page[%s]: read failed: %v", key, err)
|
||||
} else if ok {
|
||||
return payload, true
|
||||
}
|
||||
return nil, false
|
||||
return groupMemberPageCache{}, false
|
||||
}
|
||||
|
||||
func invalidateGroupMemberPages(tenantID types.TenantID, topic string) {
|
||||
@@ -2113,7 +2152,11 @@ func (groupBusinessMapper) UpsertMute(tenantID types.TenantID, mute *types.Group
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return tenantAdp.TenantGroupMuteUpsert(tenantID, mute)
|
||||
updated, err := tenantAdp.TenantGroupMuteUpsert(tenantID, mute)
|
||||
if err == nil {
|
||||
invalidateGroupMemberPages(tenantID, mute.Topic)
|
||||
}
|
||||
return updated, err
|
||||
}
|
||||
|
||||
func (groupBusinessMapper) DeleteMute(tenantID types.TenantID, topic string, uid, actor types.Uid, now time.Time) error {
|
||||
@@ -2124,7 +2167,11 @@ func (groupBusinessMapper) DeleteMute(tenantID types.TenantID, topic string, uid
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tenantAdp.TenantGroupMuteDelete(tenantID, strings.TrimSpace(topic), uid, actor, now)
|
||||
if err := tenantAdp.TenantGroupMuteDelete(tenantID, strings.TrimSpace(topic), uid, actor, now); err != nil {
|
||||
return err
|
||||
}
|
||||
invalidateGroupMemberPages(tenantID, topic)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (groupBusinessMapper) ListFiles(tenantID types.TenantID, topic, fileType, query, cursor string, limit int) ([]types.GroupFile, string, error) {
|
||||
|
||||
Reference in New Issue
Block a user