From de32143b6dbf88e4a6af940ed90bc484cd0ef9e2 Mon Sep 17 00:00:00 2001 From: zetaloop Date: Sun, 5 Apr 2026 17:04:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B=E4=B8=8E?= =?UTF-8?q?=E5=85=B3=E6=B3=A8=E5=BB=BA=E8=A1=A8=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updateMeLogic 更新后重新查询并返回 User 类型,修复 converter 转换 空响应的错误。proto_string 不再丢弃含空格的字符串。userfollows ent schema 补上 created_at 的 Default(time.Now)。 --- .../api/internal/logic/user/updateMeLogic.go | 33 +++++++++++++++---- app/users/rpc/internal/models/runtime.go | 5 +++ .../rpc/internal/models/schema/userfollows.go | 3 +- .../models/userfollows/userfollows.go | 6 ++++ .../rpc/internal/models/userfollows_create.go | 9 +++++ 5 files changed, 49 insertions(+), 7 deletions(-) diff --git a/app/users/api/internal/logic/user/updateMeLogic.go b/app/users/api/internal/logic/user/updateMeLogic.go index fb0dd17..d3c5a79 100644 --- a/app/users/api/internal/logic/user/updateMeLogic.go +++ b/app/users/api/internal/logic/user/updateMeLogic.go @@ -10,11 +10,13 @@ import ( "juwan-backend/common/converter" "juwan-backend/common/utils/contextj" "strings" + "time" "juwan-backend/app/users/api/internal/svc" "juwan-backend/app/users/api/internal/types" "github.com/zeromicro/go-zero/core/logx" + "k8s.io/apimachinery/pkg/util/json" ) type UpdateMeLogic struct { @@ -32,12 +34,12 @@ func NewUpdateMeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateMe } } -func (l *UpdateMeLogic) UpdateMe(req *types.UpdateUserProfileReq) (resp *types.UpdateUserProfileReq, err error) { +func (l *UpdateMeLogic) UpdateMe(req *types.UpdateUserProfileReq) (resp *types.User, err error) { userId, err := contextj.UserIDFrom(l.ctx) if err != nil { return nil, err } - res, err := l.svcCtx.UserRpc.UpdateUsers(l.ctx, &usercenter.UpdateUsersReq{ + _, err = l.svcCtx.UserRpc.UpdateUsers(l.ctx, &usercenter.UpdateUsersReq{ Id: userId, Nickname: proto_string(req.Nickname), Avatar: proto_string(req.Avatar), @@ -47,16 +49,35 @@ func (l *UpdateMeLogic) UpdateMe(req *types.UpdateUserProfileReq) (resp *types.U if err != nil { return nil, errors.New("update info failed") } - err = converter.StructToStruct(res, &resp) + user, err := l.svcCtx.UserRpc.GetUsersById(l.ctx, &usercenter.GetUsersByIdReq{ + Id: userId, + }) if err != nil { - logx.Errorf("unmarshal user info failed, err:%v.", err) - return nil, errors.New("unmarshal user info failed") + logx.Errorf("UpdateMeLogic.GetUsersById err: %v", err) + return nil, errors.New("get user failed") } + + resp = &types.User{} + err = converter.StructToStruct(user.Users, resp) + if err != nil { + logx.Errorf("struct to user info failed, err:%v.", err) + return nil, errors.New("get user failed") + } + + var verificationStatus map[string]string + err = json.Unmarshal([]byte(user.Users.VerificationStatus), &verificationStatus) + if err != nil { + logx.Errorf("json.Unmarshal err: %v", err) + } + resp.VerifiedRoles = user.Users.VerifiedRoles + resp.VerificationStatus = verificationStatus + resp.Role = user.Users.CurrentRole + resp.CreatedAt = time.Unix(user.Users.CreatedAt, 0).Format(time.DateTime) return } func proto_string(s string) *string { - if len(s) == 0 || strings.Contains(s, " ") { + if strings.TrimSpace(s) == "" { return nil } return &s diff --git a/app/users/rpc/internal/models/runtime.go b/app/users/rpc/internal/models/runtime.go index 135f2e2..1c67d3a 100644 --- a/app/users/rpc/internal/models/runtime.go +++ b/app/users/rpc/internal/models/runtime.go @@ -4,6 +4,7 @@ package models import ( "juwan-backend/app/users/rpc/internal/models/schema" + "juwan-backend/app/users/rpc/internal/models/userfollows" "juwan-backend/app/users/rpc/internal/models/userpreferences" "juwan-backend/app/users/rpc/internal/models/users" "time" @@ -13,6 +14,10 @@ import ( // (default values, validators, hooks and policies) and stitches it // to their package variables. func init() { + userfollowsFields := schema.UserFollows{}.Fields() + _ = userfollowsFields + userfollowsDescCreatedAt := userfollowsFields[3].Descriptor() + userfollows.DefaultCreatedAt = userfollowsDescCreatedAt.Default.(func() time.Time) userpreferencesFields := schema.UserPreferences{}.Fields() _ = userpreferencesFields // userpreferencesDescNotificationOrder is the schema descriptor for notification_order field. diff --git a/app/users/rpc/internal/models/schema/userfollows.go b/app/users/rpc/internal/models/schema/userfollows.go index 615c89c..ad2c4c2 100644 --- a/app/users/rpc/internal/models/schema/userfollows.go +++ b/app/users/rpc/internal/models/schema/userfollows.go @@ -3,6 +3,7 @@ package schema import ( "entgo.io/ent" "entgo.io/ent/schema/field" + "time" ) // UserFollows holds the schema definition for the UserFollows entity. @@ -16,7 +17,7 @@ func (UserFollows) Fields() []ent.Field { field.Int64("id").Immutable().Unique(), field.Int64("follower_id"), field.Int64("followee_id"), - field.Time("created_at").Immutable(), + field.Time("created_at").Immutable().Default(time.Now), } } diff --git a/app/users/rpc/internal/models/userfollows/userfollows.go b/app/users/rpc/internal/models/userfollows/userfollows.go index 39e8b5b..7514393 100644 --- a/app/users/rpc/internal/models/userfollows/userfollows.go +++ b/app/users/rpc/internal/models/userfollows/userfollows.go @@ -3,6 +3,8 @@ package userfollows import ( + "time" + "entgo.io/ent/dialect/sql" ) @@ -39,6 +41,10 @@ func ValidColumn(column string) bool { return false } +var ( + DefaultCreatedAt func() time.Time +) + // OrderOption defines the ordering options for the UserFollows queries. type OrderOption func(*sql.Selector) diff --git a/app/users/rpc/internal/models/userfollows_create.go b/app/users/rpc/internal/models/userfollows_create.go index dce79e6..c41a416 100644 --- a/app/users/rpc/internal/models/userfollows_create.go +++ b/app/users/rpc/internal/models/userfollows_create.go @@ -51,6 +51,7 @@ func (_c *UserFollowsCreate) Mutation() *UserFollowsMutation { // Save creates the UserFollows in the database. func (_c *UserFollowsCreate) Save(ctx context.Context) (*UserFollows, error) { + _c.defaults() return withHooks(ctx, _c.sqlSave, _c.mutation, _c.hooks) } @@ -76,6 +77,13 @@ func (_c *UserFollowsCreate) ExecX(ctx context.Context) { } } +func (_c *UserFollowsCreate) defaults() { + if _, ok := _c.mutation.CreatedAt(); !ok { + v := userfollows.DefaultCreatedAt() + _c.mutation.SetCreatedAt(v) + } +} + // check runs all checks and user-defined validators on the builder. func (_c *UserFollowsCreate) check() error { if _, ok := _c.mutation.FollowerID(); !ok { @@ -152,6 +160,7 @@ func (_c *UserFollowsCreateBulk) Save(ctx context.Context) ([]*UserFollows, erro for i := range _c.builders { func(i int, root context.Context) { builder := _c.builders[i] + builder.defaults() var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) { mutation, ok := m.(*UserFollowsMutation) if !ok {