fix: harden group lifecycle and registration writes

This commit is contained in:
richjohnrambo
2026-09-14 12:04:10 +08:00
parent 990526647c
commit 4854e090ef
9 changed files with 182 additions and 28 deletions
+10 -3
View File
@@ -6210,6 +6210,14 @@ func serveIMGroupOwnerTransfer(wrt http.ResponseWriter, req *http.Request, topic
}
if err = store.GroupBusiness.TransferOwner(principal.TenantID, topic, principal.Uid, target,
body.Version, time.Now().UTC().Round(time.Millisecond)); err != nil {
if errors.Is(err, types.ErrInvalidResponse) {
currentVersion := 0
if settings, settingsErr := store.GroupBusiness.GetSettings(principal.TenantID, topic); settingsErr == nil && settings != nil {
currentVersion = settings.Version
}
writeIMError(wrt, req, http.StatusConflict, 30006, "VERSION_CONFLICT", "version conflict", map[string]any{"current_version": currentVersion})
return
}
writeIMRelationError(wrt, req, err)
return
}
@@ -7996,9 +8004,8 @@ func mergeGroupSettingsPayload(payload map[string]any, settings *types.GroupSett
payload["description"] = settings.Description
payload["owner"] = settings.OwnerUserID.UserId()
payload["member_count"] = settings.MemberCount
if _, exists := payload["version"]; !exists {
payload["version"] = settings.Version
}
payload["status"] = settings.GroupStatus
payload["version"] = settings.Version
return payload
}