From d63b9439646302e555f04af001967d26a43efa96 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Wed, 25 Mar 2026 22:36:34 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=AE=A2=E9=98=85?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20group=5Flocked=20=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E4=B8=BA=20null=20=E9=97=AE=E9=A2=98=20+=20Kutt=20=E7=9F=AD?= =?UTF-8?q?=E9=93=BE3=E6=AC=A1=E9=87=8D=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - updateUserSubscribeLogic: 更新订阅时补充 GroupLocked 字段,避免写入 NULL 触发数据库约束错误 - inviteLinkResolver: generateShortLinkWithTimeout 增加最多3次重试,防止网络波动导致短链生成失败 Co-Authored-By: claude-flow --- .../admin/user/updateUserSubscribeLogic.go | 1 + internal/logic/common/inviteLinkResolver.go | 28 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/internal/logic/admin/user/updateUserSubscribeLogic.go b/internal/logic/admin/user/updateUserSubscribeLogic.go index b521346..6ec2267 100644 --- a/internal/logic/admin/user/updateUserSubscribeLogic.go +++ b/internal/logic/admin/user/updateUserSubscribeLogic.go @@ -54,6 +54,7 @@ func (l *UpdateUserSubscribeLogic) UpdateUserSubscribe(req *types.UpdateUserSubs UUID: userSub.UUID, Status: userSub.Status, NodeGroupId: userSub.NodeGroupId, + GroupLocked: userSub.GroupLocked, }) if err != nil { diff --git a/internal/logic/common/inviteLinkResolver.go b/internal/logic/common/inviteLinkResolver.go index fa6ab9a..299e60a 100644 --- a/internal/logic/common/inviteLinkResolver.go +++ b/internal/logic/common/inviteLinkResolver.go @@ -215,18 +215,26 @@ func (r *InviteLinkResolver) generateShortLinkWithTimeout(referCode string, time } _, domain := r.resolveShareURLAndDomain() - requestCtx := r.ctx - var cancel context.CancelFunc - if timeout > 0 { - requestCtx, cancel = context.WithTimeout(r.ctx, timeout) - defer cancel() + const maxRetries = 3 + var lastErr error + for attempt := 0; attempt < maxRetries; attempt++ { + requestCtx := r.ctx + var cancel context.CancelFunc + if timeout > 0 { + requestCtx, cancel = context.WithTimeout(r.ctx, timeout) + } + + shortLink, err := r.createShortLink(requestCtx, longLink, domain) + if cancel != nil { + cancel() + } + if err == nil && strings.TrimSpace(shortLink) != "" { + return strings.TrimSpace(shortLink), nil + } + lastErr = err } - shortLink, err := r.createShortLink(requestCtx, longLink, domain) - if err != nil { - return "", err - } - return strings.TrimSpace(shortLink), nil + return "", lastErr } func (r *InviteLinkResolver) getCachedShortLink(referCode string) string {