From 029ed489bc2d5441cdfb7b2c4c64b137d96f37a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=96=B9=E6=88=90?= Date: Fri, 6 Feb 2026 15:18:16 +0800 Subject: [PATCH] x --- internal/api/user/profile_app.go | 75 +++++++++++++------ .../mysql/model/user_invites.gen.go | 2 +- internal/service/user/login_weixin.go | 3 +- internal/service/user/sms_login.go | 3 +- 4 files changed, 56 insertions(+), 27 deletions(-) diff --git a/internal/api/user/profile_app.go b/internal/api/user/profile_app.go index 7d3111a..e1713c6 100644 --- a/internal/api/user/profile_app.go +++ b/internal/api/user/profile_app.go @@ -38,15 +38,27 @@ func (h *handler) GetUserProfile() core.HandlerFunc { // 转换为积分(浮点)用于显示 balancePoints := h.user.CentsToPointsFloat(ctx.RequestContext(), balance) + var inviterNickname, inviterAvatar, inviterCode string + if user.InviterID > 0 { + if inviter, err := h.user.GetProfile(ctx.RequestContext(), user.InviterID); err == nil { + inviterNickname = inviter.Nickname + inviterAvatar = inviter.Avatar + inviterCode = inviter.InviteCode + } + } + res := userItem{ - ID: user.ID, - Nickname: user.Nickname, - Avatar: user.Avatar, - InviteCode: user.InviteCode, - InviterID: user.InviterID, - Mobile: phone, - DouyinUserID: user.DouyinUserID, - Balance: balancePoints, + ID: user.ID, + Nickname: user.Nickname, + Avatar: user.Avatar, + InviteCode: user.InviteCode, + InviterID: user.InviterID, + InviterNickname: inviterNickname, + InviterAvatar: inviterAvatar, + InviterCode: inviterCode, + Mobile: phone, + DouyinUserID: user.DouyinUserID, + Balance: balancePoints, } ctx.Payload(res) } @@ -57,14 +69,17 @@ type modifyUserRequest struct { Avatar *string `json:"avatar"` } type userItem struct { - ID int64 `json:"id"` - Nickname string `json:"nickname"` - Avatar string `json:"avatar"` - InviteCode string `json:"invite_code"` - InviterID int64 `json:"inviter_id"` - Mobile string `json:"mobile"` - DouyinUserID string `json:"douyin_user_id"` - Balance float64 `json:"balance"` // 积分(分/rate) + ID int64 `json:"id"` + Nickname string `json:"nickname"` + Avatar string `json:"avatar"` + InviteCode string `json:"invite_code"` + InviterID int64 `json:"inviter_id"` + InviterNickname string `json:"inviter_nickname"` // 邀请人昵称 + InviterAvatar string `json:"inviter_avatar"` // 邀请人头像 + InviterCode string `json:"inviter_code"` // 邀请人邀请码 + Mobile string `json:"mobile"` + DouyinUserID string `json:"douyin_user_id"` + Balance float64 `json:"balance"` // 积分(分/rate) } type modifyUserResponse struct { User userItem `json:"user"` @@ -107,15 +122,27 @@ func (h *handler) ModifyUser() core.HandlerFunc { balance, _ := h.user.GetPointsBalance(ctx.RequestContext(), userID) balancePoints := h.user.CentsToPointsFloat(ctx.RequestContext(), balance) + var inviterNickname, inviterAvatar, inviterCode string + if item.InviterID > 0 { + if inviter, err := h.user.GetProfile(ctx.RequestContext(), item.InviterID); err == nil { + inviterNickname = inviter.Nickname + inviterAvatar = inviter.Avatar + inviterCode = inviter.InviteCode + } + } + rsp.User = userItem{ - ID: item.ID, - Nickname: item.Nickname, - Avatar: item.Avatar, - InviteCode: item.InviteCode, - InviterID: item.InviterID, - Mobile: maskedPhone, - DouyinUserID: item.DouyinUserID, - Balance: balancePoints, + ID: item.ID, + Nickname: item.Nickname, + Avatar: item.Avatar, + InviteCode: item.InviteCode, + InviterID: item.InviterID, + InviterNickname: inviterNickname, + InviterAvatar: inviterAvatar, + InviterCode: inviterCode, + Mobile: maskedPhone, + DouyinUserID: item.DouyinUserID, + Balance: balancePoints, } ctx.Payload(rsp) } diff --git a/internal/repository/mysql/model/user_invites.gen.go b/internal/repository/mysql/model/user_invites.gen.go index 3974dda..70d4a28 100644 --- a/internal/repository/mysql/model/user_invites.gen.go +++ b/internal/repository/mysql/model/user_invites.gen.go @@ -19,7 +19,7 @@ type UserInvites struct { InviteeID int64 `gorm:"column:invitee_id;not null;comment:被邀请用户ID" json:"invitee_id"` // 被邀请用户ID InviteCode string `gorm:"column:invite_code;not null;comment:邀请时使用的邀请码" json:"invite_code"` // 邀请时使用的邀请码 RewardPoints int64 `gorm:"column:reward_points;not null;comment:发放的积分数量(用于审计)" json:"reward_points"` // 发放的积分数量(用于审计) - RewardedAt time.Time `gorm:"column:rewarded_at;comment:奖励发放时间" json:"rewarded_at"` // 奖励发放时间 + RewardedAt *time.Time `gorm:"column:rewarded_at;comment:奖励发放时间" json:"rewarded_at"` // 奖励发放时间 CreatedAt time.Time `gorm:"column:created_at;not null;default:CURRENT_TIMESTAMP(3);comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt time.Time `gorm:"column:updated_at;not null;default:CURRENT_TIMESTAMP(3);comment:更新时间" json:"updated_at"` // 更新时间 DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间(软删)" json:"deleted_at"` // 删除时间(软删) diff --git a/internal/service/user/login_weixin.go b/internal/service/user/login_weixin.go index 87d998c..2f25dea 100644 --- a/internal/service/user/login_weixin.go +++ b/internal/service/user/login_weixin.go @@ -155,12 +155,13 @@ func (s *service) LoginWeixin(ctx context.Context, in LoginWeixinInput) (*LoginW if existed == nil { inviter, _ := tx.Users.WithContext(ctx).Where(tx.Users.InviteCode.Eq(in.InviteCode)).First() if inviter != nil && inviter.ID != u.ID { + now := time.Now() inv := &model.UserInvites{ InviterID: inviter.ID, InviteeID: u.ID, InviteCode: in.InviteCode, RewardPoints: 0, - RewardedAt: time.Now(), + RewardedAt: &now, } if err := tx.UserInvites.WithContext(ctx).Create(inv); err != nil { return err diff --git a/internal/service/user/sms_login.go b/internal/service/user/sms_login.go index ea5f663..ab7897b 100644 --- a/internal/service/user/sms_login.go +++ b/internal/service/user/sms_login.go @@ -241,12 +241,13 @@ func (s *service) LoginByCode(ctx context.Context, in SmsLoginInput) (*SmsLoginO if existed == nil { inviter, _ := tx.Users.WithContext(ctx).Where(tx.Users.InviteCode.Eq(in.InviteCode)).First() if inviter != nil && inviter.ID != user.ID { + now := time.Now() inv := &model.UserInvites{ InviterID: inviter.ID, InviteeID: user.ID, InviteCode: in.InviteCode, RewardPoints: 0, - RewardedAt: time.Now(), + RewardedAt: &now, } if txErr = tx.UserInvites.WithContext(ctx).Create(inv); txErr != nil { return txErr