105 lines
2.6 KiB
Go
105 lines
2.6 KiB
Go
|
package app
|
|||
|
|
|||
|
import (
|
|||
|
"Lee-WineList/api"
|
|||
|
"Lee-WineList/common/constant"
|
|||
|
"Lee-WineList/core"
|
|||
|
"Lee-WineList/model/entity"
|
|||
|
"Lee-WineList/model/param"
|
|||
|
"Lee-WineList/model/vo"
|
|||
|
"Lee-WineList/repository"
|
|||
|
"Lee-WineList/utils"
|
|||
|
"git.echol.cn/loser/logger/log"
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
"strings"
|
|||
|
)
|
|||
|
|
|||
|
type userApi struct {
|
|||
|
}
|
|||
|
|
|||
|
// UserApi 暴露接口
|
|||
|
func UserApi() *userApi {
|
|||
|
return &userApi{}
|
|||
|
}
|
|||
|
|
|||
|
// GetUser 获取当前登录用户信息
|
|||
|
func (u userApi) GetUser(ctx *gin.Context) {
|
|||
|
// 取出当前登录用户
|
|||
|
var ue entity.User
|
|||
|
if api.GetUser(ctx, &ue, false, true); ctx.IsAborted() {
|
|||
|
return
|
|||
|
}
|
|||
|
// 转换为VO
|
|||
|
var v vo.UserVO
|
|||
|
v.ParseOrdinary(ue)
|
|||
|
core.R(ctx).OkWithData(v)
|
|||
|
}
|
|||
|
|
|||
|
// BindingWeChat 绑定微信
|
|||
|
func (u userApi) BindingWeChat(ctx *gin.Context) {
|
|||
|
var p param.BindingWeChat
|
|||
|
if err := ctx.ShouldBind(&p); err != nil {
|
|||
|
core.R(ctx).FailWithMessage("参数错误" + err.Error())
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 取出当前登录用户
|
|||
|
var loginUser entity.User
|
|||
|
if api.GetUser(ctx, &loginUser, true, true); ctx.IsAborted() {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 解析出UnionId和OpenId
|
|||
|
unionId, openId, _, err := utils.WeChatUtils().GetWechatUnionId(p.Code)
|
|||
|
if err != nil {
|
|||
|
log.Errorf("获取微信UnionId失败:%s", err.Error())
|
|||
|
core.R(ctx).FailWithMessage("系统错误,请稍后再试")
|
|||
|
return
|
|||
|
}
|
|||
|
log.Debugf("用户[%v]的UnionId为[%v],OpenId为[%v]", loginUser.Id, unionId, openId)
|
|||
|
if repository.User().CheckUnionIdIsExist(unionId, openId) {
|
|||
|
core.R(ctx).FailWithMessage("该微信已绑定其他账号")
|
|||
|
return
|
|||
|
}
|
|||
|
// 解析成功,修改用户信息
|
|||
|
loginUser.WechatUnionId = &unionId
|
|||
|
loginUser.WechatOpenId = &openId
|
|||
|
if err = repository.User().UpdateUserInfo(&loginUser); err != nil {
|
|||
|
log.Errorf("修改用户信息失败:%s", err.Error())
|
|||
|
core.R(ctx).FailWithMessage("系统错误,请稍后再试")
|
|||
|
return
|
|||
|
}
|
|||
|
core.R(ctx).Ok()
|
|||
|
}
|
|||
|
|
|||
|
// UpdateUser 修改用户信息
|
|||
|
func (u userApi) UpdateUser(ctx *gin.Context) {
|
|||
|
var p param.ChangeUserInfo
|
|||
|
if err := ctx.ShouldBind(&p); err != nil {
|
|||
|
core.R(ctx).FailWithMessage("参数错误: " + err.Error())
|
|||
|
return
|
|||
|
}
|
|||
|
// 获取当前登录用户
|
|||
|
var loginUser entity.User
|
|||
|
if api.GetUser(ctx, &loginUser, false, true); ctx.IsAborted() {
|
|||
|
return
|
|||
|
}
|
|||
|
// 修改资料
|
|||
|
if p.Sex != constant.UserSexNone {
|
|||
|
loginUser.Sex = p.Sex
|
|||
|
}
|
|||
|
if p.Nickname != "" {
|
|||
|
loginUser.Nickname = p.Nickname
|
|||
|
}
|
|||
|
if p.Avatar != "" && strings.HasPrefix(p.Avatar, "http") {
|
|||
|
loginUser.Avatar = p.Avatar
|
|||
|
}
|
|||
|
// 修改数据
|
|||
|
if err := repository.User().UpdateUserInfo(&loginUser); err != nil {
|
|||
|
log.Errorf("修改用户信息失败:%s", err.Error())
|
|||
|
core.R(ctx).FailWithMessage("修改用户信息失败: " + err.Error())
|
|||
|
return
|
|||
|
}
|
|||
|
core.R(ctx).Ok()
|
|||
|
}
|