package controller import ( "errors" "github.com/gin-gonic/gin" "strconv" "trading-go/model" "trading-go/response" "trading-go/util" ) // Register // @Tags 用户模块 // @Summary 创建用户 // @Accept application/json // @Produce application/json // @param json body model.UserJson true "用户信息" // @Success 200 object response.Response // @Router /user/register [post] func Register(c *gin.Context) { var userJ model.UserJson err := c.ShouldBindJSON(&userJ) if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } id := util.GetID() //if !util.CheckMobile(userJ.Phone) { // msg := util.PhoneFormatError.Error() // response.Fail(c.Writer, msg, 400) // return //} user := model.User{ Uid: uint(id), Vid: userJ.Vid, Name: userJ.Name, Avatar: userJ.Avatar, Phone: userJ.Phone, } if !user.CheckVid() { response.Fail(c.Writer, "user already exist", 400) } if user.Vid == "" { response.Fail(c.Writer, "vid can not be null", 400) } err = user.Register() go util.NewUser(uint(id)) if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } else { msg := "register succeed" response.Success(c.Writer, msg, nil) } } // Login // @Tags 用户模块 // @Summary 登录 // @Produce application/json // @param vid formData string false "微信ID" // @Success 200 {object} response.Response // @Router /user/login [post] func Login(c *gin.Context) { var user model.User user.Vid = c.PostForm("vid") err, nu := user.Login() if err != nil && err.Error() == "sql: no rows in result set" { err = util.NoSuchUserError msg := err.Error() response.Fail(c.Writer, msg, 403) return } if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } token, err := util.CreatToken(nu.Uid) if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } data := gin.H{ "token": token, "user_info": nu, } response.Success(c.Writer, "success", data) } // ModifyUser // @Tags 用户模块 // @Summary 修改用户信息 // @Accept application/json // @Produce application/json // @param json body model.User true "用户信息" // @Success 200 {object} response.Response // @Router /user/modify [post] func ModifyUser(c *gin.Context) { var userJ model.UserJson err := c.ShouldBindJSON(&userJ) user := userJ.Change() if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } if user.Phone != "" { if !util.CheckMobile(userJ.Phone) { msg := util.PhoneFormatError.Error() response.Fail(c.Writer, msg, 400) return } if err := user.SPhone(); err != nil { if errors.Is(err, util.PhoneBeUsed) { response.Fail(c.Writer, err.Error(), 403) } else { response.Fail(c.Writer, err.Error(), 500) } return } } userOld := user.GetUser() nu, err := user.Modify(&userOld) if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) } else { msg := "modify succeed" response.Success(c.Writer, msg, nu) } } // UserInfo // @Tags 用户模块 // @Summary 获取用户信息 // @Produce application/json // @Success 200 {object} response.Response // @Router /user/info [get] func UserInfo(c *gin.Context) { var u model.User token := c.GetHeader("Authorization") t, claim, err := util.ParseToken(token) if err != nil { response.Fail(c.Writer, "failed to parse token", 500) return } if !t.Valid { response.Fail(c.Writer, "failed", 400) return } u.Uid = claim.UserId nu, err := u.Info() if err != nil || nu.Vid == "" { response.Fail(c.Writer, "failed", 500) } response.Success(c.Writer, "success", nu) } // GetUserPaged // @Tags 用户模块 // @Summary 分页用户信息 // @Produce application/json // @Param page path int true "页数" // @Param pageSize path int true "一页的大小" // @Success 200 {object} response.Response // @Router /user/{page}/{pageSize} [get] func GetUserPaged(c *gin.Context) { var user model.User p := c.Param("page") pS := c.Param("pageSize") page, err := strconv.Atoi(p) pageSize, err := strconv.Atoi(pS) if err != nil { response.Fail(c.Writer, err.Error(), 500) return } rsp, err := user.GetPaged(page, pageSize) if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } cnt, err := user.GetCnt() if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } if cnt > page*pageSize { rsp.HNext = true } response.Success(c.Writer, "success", rsp) } // GetUserList // @Tags 用户模块 // @Summary 批量获取用户信息 // @Produce application/json // @Param uid body []string true "用户id列表" // @Success 200 {object} response.Response // @Router /user/list [post] func GetUserList(c *gin.Context) { var u model.User jsonData := struct { Uid []string `json:"uid"` }{} err := c.ShouldBindJSON(&jsonData) if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } userInfo, err := u.GetUserList(jsonData.Uid) if err != nil { msg := err.Error() response.Fail(c.Writer, msg, 500) return } response.Success(c.Writer, "success", gin.H{"users": userInfo}) }