From 52887ffced24fd6ef0e9abf14b95ee9772277b2e Mon Sep 17 00:00:00 2001 From: hawklin2017 <32898629+hawklin2017@users.noreply.github.com> Date: Wed, 20 May 2026 19:15:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=94=A8=E6=88=B7=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=98=AF=E7=BE=A4=E4=B8=BB=E5=88=99=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/api/delete_user.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/api/delete_user.go b/internal/api/delete_user.go index ccc3be175..1fe5457fd 100644 --- a/internal/api/delete_user.go +++ b/internal/api/delete_user.go @@ -48,7 +48,7 @@ type deleteUserReq struct { } // DeleteUser permanently deletes a user account and cleans up associated data. -// Steps: force-logout → delete friends → quit/kick groups → hard-delete user doc. +// Steps: force-logout → delete friends → dismiss owned groups / quit others → hard-delete user doc. // Caller must be the same user as userID, or an IM admin (see CheckAccessV3). func (d *DeleteUserApi) DeleteUser(c *gin.Context) { var req deleteUserReq @@ -108,7 +108,7 @@ func (d *DeleteUserApi) DeleteUser(c *gin.Context) { } } - // 4. Quit / kick from all joined groups (paginated, page size 100) + // 4. Leave all joined groups: dismiss groups owned by the user, quit the rest (paginated). pageNumber := int32(1) const pageSize = int32(100) for { @@ -121,6 +121,15 @@ func (d *DeleteUserApi) DeleteUser(c *gin.Context) { break } for _, g := range groupListResp.Groups { + if g.OwnerUserID == req.UserID { + if _, err := d.groupClient.DismissGroup(c, &group.DismissGroupReq{ + GroupID: g.GroupID, + DeleteMember: true, + }); err != nil { + log.ZWarn(c, "DeleteUser: DismissGroup failed", err, "userID", req.UserID, "groupID", g.GroupID) + } + continue + } if _, err := d.groupClient.QuitGroup(c, &group.QuitGroupReq{ GroupID: g.GroupID, UserID: req.UserID,