From d1981c23ab8a65930cf3dd719cb8db5702715487 Mon Sep 17 00:00:00 2001 From: zetaloop Date: Fri, 3 Apr 2026 19:24:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=A1=E6=A0=B8=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E5=90=8E=E5=85=81=E8=AE=B8=E5=88=87=E6=8D=A2=E5=B7=B2=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/updateUserVerificationsLogic.go | 25 ++++++++++++++++++- .../internal/logic/user/switchRoleLogic.go | 7 +++--- .../rpc/internal/logic/updateUsersLogic.go | 7 +----- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/app/user_verifications/rpc/internal/logic/updateUserVerificationsLogic.go b/app/user_verifications/rpc/internal/logic/updateUserVerificationsLogic.go index a4439dd..6d2a492 100644 --- a/app/user_verifications/rpc/internal/logic/updateUserVerificationsLogic.go +++ b/app/user_verifications/rpc/internal/logic/updateUserVerificationsLogic.go @@ -8,6 +8,8 @@ import ( "juwan-backend/app/user_verifications/rpc/internal/svc" "juwan-backend/app/user_verifications/rpc/pb" + userspb "juwan-backend/app/users/rpc/pb" + "slices" "github.com/zeromicro/go-zero/core/logx" ) @@ -41,7 +43,7 @@ func (l *UpdateUserVerificationsLogic) UpdateUserVerifications(in *pb.UpdateUser } } - _, err := l.svcCtx.UserVeriModelRW.UpdateOneID(in.Id). + uv, err := l.svcCtx.UserVeriModelRW.UpdateOneID(in.Id). SetNillableRejectReason(in.RejectReason). SetNillableMaterials(materials). SetNillableRole(in.Role). @@ -53,5 +55,26 @@ func (l *UpdateUserVerificationsLogic) UpdateUserVerifications(in *pb.UpdateUser return nil, errors.New("save user verifications failed") } + if in.Status != nil && *in.Status == "approved" && uv.Role != "" { + userResp, err := l.svcCtx.UserRpc.GetUsersById(l.ctx, &userspb.GetUsersByIdReq{Id: uv.UserID}) + if err != nil { + logx.Errorf("get user by id failed when syncing verified roles, err:%v.", err) + return nil, errors.New("sync verified roles failed") + } + + verifiedRoles := append([]string{}, userResp.Users.VerifiedRoles...) + if !slices.Contains(verifiedRoles, uv.Role) { + verifiedRoles = append(verifiedRoles, uv.Role) + _, err = l.svcCtx.UserRpc.UpdateUsers(l.ctx, &userspb.UpdateUsersReq{ + Id: uv.UserID, + VerifiedRoles: verifiedRoles, + }) + if err != nil { + logx.Errorf("update user verified roles failed, err:%v.", err) + return nil, errors.New("sync verified roles failed") + } + } + } + return &pb.UpdateUserVerificationsResp{}, nil } diff --git a/app/users/api/internal/logic/user/switchRoleLogic.go b/app/users/api/internal/logic/user/switchRoleLogic.go index 7cd5f9f..f30f688 100644 --- a/app/users/api/internal/logic/user/switchRoleLogic.go +++ b/app/users/api/internal/logic/user/switchRoleLogic.go @@ -13,7 +13,6 @@ import ( "juwan-backend/app/users/api/internal/types" "github.com/zeromicro/go-zero/core/logx" - "google.golang.org/protobuf/proto" ) type SwitchRoleLogic struct { @@ -37,9 +36,9 @@ func (l *SwitchRoleLogic) SwitchRole(req *types.SwitchRoleReq) (resp *types.Empt logx.Errorf("get user id from context: %v", err) return nil, errors.New("illegal id") } - _, err = l.svcCtx.UserRpc.UpdateUsers(l.ctx, &usercenter.UpdateUsersReq{ - Id: id, - CurrentRole: proto.String(req.Role), + _, err = l.svcCtx.UserRpc.SwitchRole(l.ctx, &usercenter.SwitchRoleReq{ + UserId: id, + NewRole: req.Role, }) if err != nil { diff --git a/app/users/rpc/internal/logic/updateUsersLogic.go b/app/users/rpc/internal/logic/updateUsersLogic.go index 60e58ae..7fc4034 100644 --- a/app/users/rpc/internal/logic/updateUsersLogic.go +++ b/app/users/rpc/internal/logic/updateUsersLogic.go @@ -31,12 +31,7 @@ func (l *UpdateUsersLogic) UpdateUsers(in *pb.UpdateUsersReq) (*pb.UpdateUsersRe SetNillableCurrentRole(in.CurrentRole). SetNillablePasswordHash(in.PasswordHash) if len(in.VerifiedRoles) > 0 { - var verifiedRoles types.TextArray - err := verifiedRoles.Scan(in.VerifiedRoles) - if err != nil { - logx.Errorf("failed to scan verified roles: %v", err) - return nil, err - } + verifiedRoles := types.TextArray{Elements: append([]string{}, in.VerifiedRoles...), Valid: true} updater.SetVerifiedRoles(verifiedRoles) } err := updater.Exec(l.ctx)