lckt-server/service/user/user.go
2025-04-17 17:41:47 +08:00

116 lines
2.7 KiB
Go

package user
import (
"context"
"fmt"
"git.echol.cn/loser/lckt/global"
"git.echol.cn/loser/lckt/model/user"
"git.echol.cn/loser/lckt/model/user/request"
"git.echol.cn/loser/lckt/utils/sms"
"go.uber.org/zap"
"math/rand"
"time"
)
type UserService struct{}
func (u *UserService) GetUserById(id int) (user user.User, err error) {
return
}
// SendCode 发送验证码
func (u *UserService) SendCode(req request.SendCodeReq) (err error) {
rdb := global.GVA_REDIS
key := fmt.Sprintf("VerifyCode:%s", req.Phone)
// 发送频率检查
result, err := rdb.Get(context.Background(), key).Result()
if result != "" {
global.GVA_LOG.Error("验证码发送过于频繁", zap.String("phone", req.Phone))
return
}
rand.New(rand.NewSource(time.Now().UnixNano()))
verifyCode := fmt.Sprintf("%06v", rand.Int31n(1000000))
if ok := sms.SendSMS(req.Phone, verifyCode); !ok {
global.GVA_LOG.Error("发送验证码失败")
return
}
//
if err = rdb.Set(context.Background(), key, verifyCode, time.Duration(global.GVA_CONFIG.SMS.ExpireTime)*time.Second).Err(); err != nil {
global.GVA_LOG.Error("设置验证码缓存失败", zap.Error(err))
return
}
return
}
// Login 用户登录
func (u *UserService) Login(req request.CodeLoginReq) (users user.User, err error) {
// 1. 判断用户是否存在
var count int64
err = global.GVA_DB.Model(&user.User{}).Where("phone = ?", req.Phone).Count(&count).Error
if err != nil {
global.GVA_LOG.Error("查询用户失败", zap.Error(err))
return
}
// 2. 如果用户不存在,则创建用户
if count == 0 {
user := user.User{
Phone: req.Phone,
}
err = global.GVA_DB.Save(&user).Error
if err != nil {
global.GVA_LOG.Error("创建用户失败", zap.Error(err))
return
}
} else {
err = global.GVA_DB.Where("phone = ?", req.Phone).First(&users).Error
if err != nil {
global.GVA_LOG.Error("查询用户失败", zap.Error(err))
return
}
}
return
}
func (u *UserService) GetUserList(p request.GetUserListReq) (userList user.User, total int64, err error) {
limit := p.PageSize
offset := p.PageSize * (p.Page - 1)
// 创建db
db := global.GVA_DB.Model(&user.User{})
// 如果有条件搜索 下方会自动创建搜索语句
if p.Type != 0 {
db = db.Where("user_type = ?", p.Type)
}
if p.UserLabel != "" {
db = db.Where("user_label = ?", p.UserLabel)
}
err = db.Count(&total).Error
if err != nil {
return
}
if limit != 0 {
db = db.Limit(limit).Offset(offset)
}
err = db.Find(&userList).Error
return
}
func (u *UserService) SetBalance(p request.SetBalanceReq) (err error) {
err = global.GVA_DB.Model(&user.User{}).Where("id = ?", p.Id).Update("balance", p.Balance).Error
if err != nil {
global.GVA_LOG.Error("设置用户余额失败", zap.Error(err))
return
}
return
}