This commit is contained in:
邹方成 2026-02-06 15:18:16 +08:00
parent 571cb2f4db
commit 029ed489bc
4 changed files with 56 additions and 27 deletions

View File

@ -38,15 +38,27 @@ func (h *handler) GetUserProfile() core.HandlerFunc {
// 转换为积分(浮点)用于显示 // 转换为积分(浮点)用于显示
balancePoints := h.user.CentsToPointsFloat(ctx.RequestContext(), balance) 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{ res := userItem{
ID: user.ID, ID: user.ID,
Nickname: user.Nickname, Nickname: user.Nickname,
Avatar: user.Avatar, Avatar: user.Avatar,
InviteCode: user.InviteCode, InviteCode: user.InviteCode,
InviterID: user.InviterID, InviterID: user.InviterID,
Mobile: phone, InviterNickname: inviterNickname,
DouyinUserID: user.DouyinUserID, InviterAvatar: inviterAvatar,
Balance: balancePoints, InviterCode: inviterCode,
Mobile: phone,
DouyinUserID: user.DouyinUserID,
Balance: balancePoints,
} }
ctx.Payload(res) ctx.Payload(res)
} }
@ -57,14 +69,17 @@ type modifyUserRequest struct {
Avatar *string `json:"avatar"` Avatar *string `json:"avatar"`
} }
type userItem struct { type userItem struct {
ID int64 `json:"id"` ID int64 `json:"id"`
Nickname string `json:"nickname"` Nickname string `json:"nickname"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
InviteCode string `json:"invite_code"` InviteCode string `json:"invite_code"`
InviterID int64 `json:"inviter_id"` InviterID int64 `json:"inviter_id"`
Mobile string `json:"mobile"` InviterNickname string `json:"inviter_nickname"` // 邀请人昵称
DouyinUserID string `json:"douyin_user_id"` InviterAvatar string `json:"inviter_avatar"` // 邀请人头像
Balance float64 `json:"balance"` // 积分(分/rate InviterCode string `json:"inviter_code"` // 邀请人邀请码
Mobile string `json:"mobile"`
DouyinUserID string `json:"douyin_user_id"`
Balance float64 `json:"balance"` // 积分(分/rate
} }
type modifyUserResponse struct { type modifyUserResponse struct {
User userItem `json:"user"` User userItem `json:"user"`
@ -107,15 +122,27 @@ func (h *handler) ModifyUser() core.HandlerFunc {
balance, _ := h.user.GetPointsBalance(ctx.RequestContext(), userID) balance, _ := h.user.GetPointsBalance(ctx.RequestContext(), userID)
balancePoints := h.user.CentsToPointsFloat(ctx.RequestContext(), balance) 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{ rsp.User = userItem{
ID: item.ID, ID: item.ID,
Nickname: item.Nickname, Nickname: item.Nickname,
Avatar: item.Avatar, Avatar: item.Avatar,
InviteCode: item.InviteCode, InviteCode: item.InviteCode,
InviterID: item.InviterID, InviterID: item.InviterID,
Mobile: maskedPhone, InviterNickname: inviterNickname,
DouyinUserID: item.DouyinUserID, InviterAvatar: inviterAvatar,
Balance: balancePoints, InviterCode: inviterCode,
Mobile: maskedPhone,
DouyinUserID: item.DouyinUserID,
Balance: balancePoints,
} }
ctx.Payload(rsp) ctx.Payload(rsp)
} }

View File

@ -19,7 +19,7 @@ type UserInvites struct {
InviteeID int64 `gorm:"column:invitee_id;not null;comment:被邀请用户ID" json:"invitee_id"` // 被邀请用户ID 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"` // 邀请时使用的邀请码 InviteCode string `gorm:"column:invite_code;not null;comment:邀请时使用的邀请码" json:"invite_code"` // 邀请时使用的邀请码
RewardPoints int64 `gorm:"column:reward_points;not null;comment:发放的积分数量(用于审计)" json:"reward_points"` // 发放的积分数量(用于审计) 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"` // 创建时间 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"` // 更新时间 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"` // 删除时间(软删) DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间(软删)" json:"deleted_at"` // 删除时间(软删)

View File

@ -155,12 +155,13 @@ func (s *service) LoginWeixin(ctx context.Context, in LoginWeixinInput) (*LoginW
if existed == nil { if existed == nil {
inviter, _ := tx.Users.WithContext(ctx).Where(tx.Users.InviteCode.Eq(in.InviteCode)).First() inviter, _ := tx.Users.WithContext(ctx).Where(tx.Users.InviteCode.Eq(in.InviteCode)).First()
if inviter != nil && inviter.ID != u.ID { if inviter != nil && inviter.ID != u.ID {
now := time.Now()
inv := &model.UserInvites{ inv := &model.UserInvites{
InviterID: inviter.ID, InviterID: inviter.ID,
InviteeID: u.ID, InviteeID: u.ID,
InviteCode: in.InviteCode, InviteCode: in.InviteCode,
RewardPoints: 0, RewardPoints: 0,
RewardedAt: time.Now(), RewardedAt: &now,
} }
if err := tx.UserInvites.WithContext(ctx).Create(inv); err != nil { if err := tx.UserInvites.WithContext(ctx).Create(inv); err != nil {
return err return err

View File

@ -241,12 +241,13 @@ func (s *service) LoginByCode(ctx context.Context, in SmsLoginInput) (*SmsLoginO
if existed == nil { if existed == nil {
inviter, _ := tx.Users.WithContext(ctx).Where(tx.Users.InviteCode.Eq(in.InviteCode)).First() inviter, _ := tx.Users.WithContext(ctx).Where(tx.Users.InviteCode.Eq(in.InviteCode)).First()
if inviter != nil && inviter.ID != user.ID { if inviter != nil && inviter.ID != user.ID {
now := time.Now()
inv := &model.UserInvites{ inv := &model.UserInvites{
InviterID: inviter.ID, InviterID: inviter.ID,
InviteeID: user.ID, InviteeID: user.ID,
InviteCode: in.InviteCode, InviteCode: in.InviteCode,
RewardPoints: 0, RewardPoints: 0,
RewardedAt: time.Now(), RewardedAt: &now,
} }
if txErr = tx.UserInvites.WithContext(ctx).Create(inv); txErr != nil { if txErr = tx.UserInvites.WithContext(ctx).Create(inv); txErr != nil {
return txErr return txErr