113 lines
2.9 KiB
Go
113 lines
2.9 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"git.echol.cn/loser/lckt/global"
|
|
"git.echol.cn/loser/lckt/model/app/vo"
|
|
"git.echol.cn/loser/lckt/model/user"
|
|
"git.echol.cn/loser/lckt/model/user/request"
|
|
"github.com/ArtisanCloud/PowerSocialite/v3/src/providers"
|
|
"go.uber.org/zap"
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
type AppUserService struct{}
|
|
|
|
// Login 用户登录
|
|
func (u *AppUserService) 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,
|
|
UserLabel: 1,
|
|
}
|
|
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
|
|
}
|
|
|
|
// WechatLogin 微信登录
|
|
func (u *AppUserService) WechatLogin(info *providers.User) (users user.User, err error) {
|
|
openID := info.GetOpenID()
|
|
var count int64
|
|
// 1. 判断用户是否存在
|
|
err = global.GVA_DB.Model(&users).Where("open_id = ?", openID).Count(&count).Error
|
|
if err != nil {
|
|
global.GVA_LOG.Error("查询用户失败", zap.Error(err))
|
|
return
|
|
}
|
|
|
|
if count == 0 {
|
|
newUser := user.User{
|
|
OpenId: openID,
|
|
NickName: info.GetNickname(),
|
|
Avatar: info.GetAvatar(),
|
|
}
|
|
err = global.GVA_DB.Save(&newUser).Error
|
|
if err != nil {
|
|
global.GVA_LOG.Error("创建用户失败", zap.Error(err))
|
|
return
|
|
}
|
|
return newUser, nil
|
|
} else {
|
|
err = global.GVA_DB.Where("open_id = ?", openID).First(&users).Error
|
|
if err != nil {
|
|
global.GVA_LOG.Error("查询用户失败", zap.Error(err))
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// PwdLogin 用户密码登录
|
|
func (u *AppUserService) PwdLogin(req request.PwdLoginReq) (users user.User, err error) {
|
|
// 1. 判断用户是否存在
|
|
var count int64
|
|
err = global.GVA_DB.Model(&user.User{}).Where("phone = ?", req.Phone).First(&users).Count(&count).Error
|
|
if err != nil {
|
|
global.GVA_LOG.Error("查询用户失败", zap.Error(err))
|
|
return
|
|
}
|
|
if count == 0 {
|
|
global.GVA_LOG.Error("用户不存在")
|
|
err = fmt.Errorf("用户不存在")
|
|
return
|
|
}
|
|
|
|
// 2. 判断密码是否正确
|
|
err = bcrypt.CompareHashAndPassword([]byte(users.Password), []byte(req.Password))
|
|
if err != nil {
|
|
global.GVA_LOG.Error("密码错误", zap.Error(err))
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (u *AppUserService) GetUserInfo(id uint) (info vo.UserInfo, err error) {
|
|
err = global.GVA_DB.Model(&user.User{}).Where("id = ?", id).First(&info).Error
|
|
if err != nil {
|
|
global.GVA_LOG.Error("查询用户信息失败", zap.Error(err))
|
|
return
|
|
}
|
|
return
|
|
}
|