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

105 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
}