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)