Lee-WineList/repository/user.go
2023-04-24 17:19:41 +08:00

100 lines
2.6 KiB
Go

package repository
import (
"Lee-WineList/client"
"Lee-WineList/config"
"Lee-WineList/model/entity"
"Lee-WineList/model/resp"
"encoding/json"
"errors"
"fmt"
"git.echol.cn/loser/logger/log"
"gorm.io/gorm"
"net/http"
)
type user struct {
}
// User ...
func User() *user {
return &user{}
}
// GetUser 查询单个用户信息
func (user) GetUser(user *entity.User) (err error) {
return client.MySQL.Take(&user, user).Error
}
// Login Code登录
func (u *user) Login(code string) *entity.User {
var acsJson resp.Code2SessionResult
acs := resp.Code2Session{
Code: code,
AppId: config.Scd.Tencent.MiniApp.AppId,
AppSecret: config.Scd.Tencent.MiniApp.AppSecret,
}
api := "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"
res, err := http.DefaultClient.Get(fmt.Sprintf(api, acs.AppId, acs.AppSecret, acs.Code))
if err != nil {
fmt.Println("微信登录凭证校验接口请求错误")
return nil
}
if err := json.NewDecoder(res.Body).Decode(&acsJson); err != nil {
fmt.Println("decoder error...")
return nil
}
// 查看用户是否已经存在
rows := client.MySQL.Where("open_id = ?", acsJson.OpenId).First(&entity.User{}).RowsAffected
if rows == 0 {
// 不存在,添加用户
fmt.Println(acsJson.OpenId)
user := entity.User{
OpenId: acsJson.OpenId,
}
row := client.MySQL.Create(&user).RowsAffected
if row == 0 {
fmt.Println("add app user error...")
return nil
}
}
return &entity.User{OpenId: acsJson.OpenId}
}
// GetOrCreate 查询或创建用户
func (user) GetOrCreate(user *entity.User) (err error) {
err = client.MySQL.Take(&user, user).Error
if err == nil {
return
}
// 如果是没查询到记录,则创建用户
if err == gorm.ErrRecordNotFound {
// 用户不存在,创建用户
user.Nickname = "用户"
//user.Avatar = "https://hyxc-mini.oss-cn-beijing.aliyuncs.com/application/resource/miniapp/index/index-more-love.png"
user.Avatar = "https://hyxc-mini.oss-cn-beijing.aliyuncs.com/avatar/mona-loading-dark.gif"
if err = client.MySQL.Create(&user).Error; err != nil {
log.Errorf("账号创建失败: %v", err)
err = errors.New("登录失败")
return
}
}
return
}
// CheckUnionIdIsExist 检查UnionId和OpenId是否存在
func (user) CheckUnionIdIsExist(unionId, openId string) bool {
var count int64
err := client.MySQL.Model(&entity.User{}).Where("union_id = ? and open_id = ?", unionId, openId).Count(&count).Error
if err != nil {
return false
}
return count > 0
}
// UpdateUserInfo 更新普通用户信息
func (user) UpdateUserInfo(e *entity.User) (err error) {
return client.MySQL.Updates(&e).Error
}