fix: 审核通过后允许切换已认证角色

This commit is contained in:
zetaloop
2026-04-03 19:24:35 +08:00
parent f1baefdf47
commit d1981c23ab
3 changed files with 28 additions and 11 deletions
@@ -8,6 +8,8 @@ import (
"juwan-backend/app/user_verifications/rpc/internal/svc" "juwan-backend/app/user_verifications/rpc/internal/svc"
"juwan-backend/app/user_verifications/rpc/pb" "juwan-backend/app/user_verifications/rpc/pb"
userspb "juwan-backend/app/users/rpc/pb"
"slices"
"github.com/zeromicro/go-zero/core/logx" "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). SetNillableRejectReason(in.RejectReason).
SetNillableMaterials(materials). SetNillableMaterials(materials).
SetNillableRole(in.Role). SetNillableRole(in.Role).
@@ -53,5 +55,26 @@ func (l *UpdateUserVerificationsLogic) UpdateUserVerifications(in *pb.UpdateUser
return nil, errors.New("save user verifications failed") 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 return &pb.UpdateUserVerificationsResp{}, nil
} }
@@ -13,7 +13,6 @@ import (
"juwan-backend/app/users/api/internal/types" "juwan-backend/app/users/api/internal/types"
"github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/logx"
"google.golang.org/protobuf/proto"
) )
type SwitchRoleLogic struct { 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) logx.Errorf("get user id from context: %v", err)
return nil, errors.New("illegal id") return nil, errors.New("illegal id")
} }
_, err = l.svcCtx.UserRpc.UpdateUsers(l.ctx, &usercenter.UpdateUsersReq{ _, err = l.svcCtx.UserRpc.SwitchRole(l.ctx, &usercenter.SwitchRoleReq{
Id: id, UserId: id,
CurrentRole: proto.String(req.Role), NewRole: req.Role,
}) })
if err != nil { if err != nil {
@@ -31,12 +31,7 @@ func (l *UpdateUsersLogic) UpdateUsers(in *pb.UpdateUsersReq) (*pb.UpdateUsersRe
SetNillableCurrentRole(in.CurrentRole). SetNillableCurrentRole(in.CurrentRole).
SetNillablePasswordHash(in.PasswordHash) SetNillablePasswordHash(in.PasswordHash)
if len(in.VerifiedRoles) > 0 { if len(in.VerifiedRoles) > 0 {
var verifiedRoles types.TextArray verifiedRoles := types.TextArray{Elements: append([]string{}, in.VerifiedRoles...), Valid: true}
err := verifiedRoles.Scan(in.VerifiedRoles)
if err != nil {
logx.Errorf("failed to scan verified roles: %v", err)
return nil, err
}
updater.SetVerifiedRoles(verifiedRoles) updater.SetVerifiedRoles(verifiedRoles)
} }
err := updater.Exec(l.ctx) err := updater.Exec(l.ctx)