You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.0 KiB
85 lines
2.0 KiB
package logic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"healthapi/internal/model"
|
|
"healthapi/internal/svc"
|
|
"healthapi/internal/types"
|
|
"healthapi/pkg/errorx"
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type GetMemberInfoLogic struct {
|
|
logx.Logger
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewGetMemberInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetMemberInfoLogic {
|
|
return &GetMemberInfoLogic{
|
|
Logger: logx.WithContext(ctx),
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
}
|
|
}
|
|
|
|
func (l *GetMemberInfoLogic) GetMemberInfo() (resp *types.MemberInfo, err error) {
|
|
userID, err := GetUserIDFromCtx(l.ctx)
|
|
if err != nil {
|
|
return nil, errorx.ErrUnauthorized
|
|
}
|
|
|
|
var user model.User
|
|
if err := l.svcCtx.DB.First(&user, userID).Error; err != nil {
|
|
return nil, errorx.ErrUserNotFound
|
|
}
|
|
|
|
// 获取当前等级配置
|
|
levelConfig := model.MemberLevelConfigs[user.MemberLevel]
|
|
if levelConfig.Level == "" {
|
|
levelConfig = model.MemberLevelConfigs[model.MemberLevelNormal]
|
|
}
|
|
|
|
// 计算下一等级信息
|
|
nextLevel := ""
|
|
nextLevelSpent := float64(0)
|
|
switch user.MemberLevel {
|
|
case model.MemberLevelNormal:
|
|
nextLevel = model.MemberLevelSilver
|
|
nextLevelSpent = 500 - user.TotalSpent
|
|
case model.MemberLevelSilver:
|
|
nextLevel = model.MemberLevelGold
|
|
nextLevelSpent = 2000 - user.TotalSpent
|
|
case model.MemberLevelGold:
|
|
nextLevel = model.MemberLevelDiamond
|
|
nextLevelSpent = 5000 - user.TotalSpent
|
|
case model.MemberLevelDiamond:
|
|
nextLevel = ""
|
|
nextLevelSpent = 0
|
|
}
|
|
if nextLevelSpent < 0 {
|
|
nextLevelSpent = 0
|
|
}
|
|
|
|
memberSince := ""
|
|
if user.MemberSince != nil {
|
|
memberSince = user.MemberSince.Format("2006-01-02")
|
|
}
|
|
|
|
resp = &types.MemberInfo{
|
|
Level: user.MemberLevel,
|
|
LevelName: levelConfig.Name,
|
|
TotalSpent: user.TotalSpent,
|
|
Points: user.Points,
|
|
MemberSince: memberSince,
|
|
NextLevel: nextLevel,
|
|
NextLevelSpent: nextLevelSpent,
|
|
Discount: levelConfig.Discount,
|
|
PointsMultiplier: levelConfig.PointsMultiplier,
|
|
FreeShippingMin: levelConfig.FreeShippingMin,
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|