初始化
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
package controller
|
||||
|
||||
// Api api接口
|
||||
type Api struct {
|
||||
Login // 登录
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"time"
|
||||
"vote-api/api/dao"
|
||||
"vote-api/api/dto"
|
||||
"vote-api/api/model"
|
||||
"vote-api/api/requests"
|
||||
"vote-api/api/responses"
|
||||
"vote-api/api/service"
|
||||
"vote-api/global"
|
||||
"vote-api/utils"
|
||||
)
|
||||
|
||||
type Login struct{}
|
||||
|
||||
func (r *Login) Login(c *gin.Context) {
|
||||
loginRequest := requests.LoginRequest{}
|
||||
req := loginRequest.Login
|
||||
if err := c.ShouldBind(&req); err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 参数验证
|
||||
if err := global.Validate.Struct(req); err != nil {
|
||||
responses.FailWithMessage(utils.Translate(err), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
utils.LogJsonErr("操作失败", r)
|
||||
responses.FailWithMessage("操作失败", c)
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
// 检测用户信息
|
||||
userDao := dao.UserDao{}
|
||||
maps := make(map[string]interface{})
|
||||
maps["open_id"] = req.OpenId
|
||||
user, err := userDao.GetUser(maps)
|
||||
// 新用户处理方式
|
||||
if user == nil {
|
||||
// 登录ip
|
||||
publicService := service.PublicService{}
|
||||
loginIp := publicService.GetUserIP(c.Request)
|
||||
|
||||
// 新增用户
|
||||
user = &model.User{
|
||||
OpenId: req.OpenId,
|
||||
LoginIp: loginIp,
|
||||
}
|
||||
loginAt := model.LocalTime(time.Now())
|
||||
user.LoginAt = &loginAt
|
||||
user, err = userDao.AddUser(tx, user)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 下发token
|
||||
token := &utils.Token{
|
||||
UserId: fmt.Sprintf("%d", user.UserId),
|
||||
}
|
||||
|
||||
// 生成jwt
|
||||
jwt, err := token.NewJWT()
|
||||
if err != nil || jwt == "" {
|
||||
responses.FailWithMessage("登陆失败", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.LoginDto{
|
||||
UserId: fmt.Sprintf("%d", user.UserId),
|
||||
Token: jwt,
|
||||
}
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
Reference in New Issue
Block a user