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 }