usercontroller.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package controller
  2. import (
  3. "errors"
  4. "github.com/gin-gonic/gin"
  5. "strconv"
  6. "trading-go/model"
  7. "trading-go/response"
  8. "trading-go/util"
  9. )
  10. // Register
  11. // @Tags 用户模块
  12. // @Summary 创建用户
  13. // @Accept application/json
  14. // @Produce application/json
  15. // @param json body model.UserJson true "用户信息"
  16. // @Success 200 object response.Response
  17. // @Router /user/register [post]
  18. func Register(c *gin.Context) {
  19. var userJ model.UserJson
  20. err := c.ShouldBindJSON(&userJ)
  21. if err != nil {
  22. msg := err.Error()
  23. response.Fail(c.Writer, msg, 500)
  24. return
  25. }
  26. id := util.GetID()
  27. //if !util.CheckMobile(userJ.Phone) {
  28. // msg := util.PhoneFormatError.Error()
  29. // response.Fail(c.Writer, msg, 400)
  30. // return
  31. //}
  32. user := model.User{
  33. Uid: uint(id),
  34. Vid: userJ.Vid,
  35. Name: userJ.Name,
  36. Avatar: userJ.Avatar,
  37. Phone: userJ.Phone,
  38. }
  39. if !user.CheckVid() {
  40. response.Fail(c.Writer, "user already exist", 400)
  41. }
  42. if user.Vid == "" {
  43. response.Fail(c.Writer, "vid can not be null", 400)
  44. }
  45. err = user.Register()
  46. go util.NewUser(uint(id))
  47. if err != nil {
  48. msg := err.Error()
  49. response.Fail(c.Writer, msg, 500)
  50. return
  51. } else {
  52. msg := "register succeed"
  53. response.Success(c.Writer, msg, nil)
  54. }
  55. }
  56. // Login
  57. // @Tags 用户模块
  58. // @Summary 登录
  59. // @Produce application/json
  60. // @param vid formData string false "微信ID"
  61. // @Success 200 {object} response.Response
  62. // @Router /user/login [post]
  63. func Login(c *gin.Context) {
  64. var user model.User
  65. user.Vid = c.PostForm("vid")
  66. err, nu := user.Login()
  67. if err != nil && err.Error() == "sql: no rows in result set" {
  68. err = util.NoSuchUserError
  69. msg := err.Error()
  70. response.Fail(c.Writer, msg, 403)
  71. return
  72. }
  73. if err != nil {
  74. msg := err.Error()
  75. response.Fail(c.Writer, msg, 500)
  76. return
  77. }
  78. token, err := util.CreatToken(nu.Uid)
  79. if err != nil {
  80. msg := err.Error()
  81. response.Fail(c.Writer, msg, 500)
  82. return
  83. }
  84. data := gin.H{
  85. "token": token,
  86. "user_info": nu,
  87. }
  88. response.Success(c.Writer, "success", data)
  89. }
  90. // ModifyUser
  91. // @Tags 用户模块
  92. // @Summary 修改用户信息
  93. // @Accept application/json
  94. // @Produce application/json
  95. // @param json body model.User true "用户信息"
  96. // @Success 200 {object} response.Response
  97. // @Router /user/modify [post]
  98. func ModifyUser(c *gin.Context) {
  99. var userJ model.UserJson
  100. err := c.ShouldBindJSON(&userJ)
  101. user := userJ.Change()
  102. if err != nil {
  103. msg := err.Error()
  104. response.Fail(c.Writer, msg, 500)
  105. return
  106. }
  107. if user.Phone != "" {
  108. if !util.CheckMobile(userJ.Phone) {
  109. msg := util.PhoneFormatError.Error()
  110. response.Fail(c.Writer, msg, 400)
  111. return
  112. }
  113. if err := user.SPhone(); err != nil {
  114. if errors.Is(err, util.PhoneBeUsed) {
  115. response.Fail(c.Writer, err.Error(), 403)
  116. } else {
  117. response.Fail(c.Writer, err.Error(), 500)
  118. }
  119. return
  120. }
  121. }
  122. userOld := user.GetUser()
  123. nu, err := user.Modify(&userOld)
  124. if err != nil {
  125. msg := err.Error()
  126. response.Fail(c.Writer, msg, 500)
  127. } else {
  128. msg := "modify succeed"
  129. response.Success(c.Writer, msg, nu)
  130. }
  131. }
  132. // UserInfo
  133. // @Tags 用户模块
  134. // @Summary 获取用户信息
  135. // @Produce application/json
  136. // @Success 200 {object} response.Response
  137. // @Router /user/info [get]
  138. func UserInfo(c *gin.Context) {
  139. var u model.User
  140. token := c.GetHeader("Authorization")
  141. t, claim, err := util.ParseToken(token)
  142. if err != nil {
  143. response.Fail(c.Writer, "failed to parse token", 500)
  144. return
  145. }
  146. if !t.Valid {
  147. response.Fail(c.Writer, "failed", 400)
  148. return
  149. }
  150. u.Uid = claim.UserId
  151. nu, err := u.Info()
  152. if err != nil || nu.Vid == "" {
  153. response.Fail(c.Writer, "failed", 500)
  154. }
  155. response.Success(c.Writer, "success", nu)
  156. }
  157. // GetUserPaged
  158. // @Tags 用户模块
  159. // @Summary 分页用户信息
  160. // @Produce application/json
  161. // @Param page path int true "页数"
  162. // @Param pageSize path int true "一页的大小"
  163. // @Success 200 {object} response.Response
  164. // @Router /user/{page}/{pageSize} [get]
  165. func GetUserPaged(c *gin.Context) {
  166. var user model.User
  167. p := c.Param("page")
  168. pS := c.Param("pageSize")
  169. page, err := strconv.Atoi(p)
  170. pageSize, err := strconv.Atoi(pS)
  171. if err != nil {
  172. response.Fail(c.Writer, err.Error(), 500)
  173. return
  174. }
  175. rsp, err := user.GetPaged(page, pageSize)
  176. if err != nil {
  177. msg := err.Error()
  178. response.Fail(c.Writer, msg, 500)
  179. return
  180. }
  181. cnt, err := user.GetCnt()
  182. if err != nil {
  183. msg := err.Error()
  184. response.Fail(c.Writer, msg, 500)
  185. return
  186. }
  187. if cnt > page*pageSize {
  188. rsp.HNext = true
  189. }
  190. response.Success(c.Writer, "success", rsp)
  191. }
  192. // GetUserList
  193. // @Tags 用户模块
  194. // @Summary 批量获取用户信息
  195. // @Produce application/json
  196. // @Param uid body []string true "用户id列表"
  197. // @Success 200 {object} response.Response
  198. // @Router /user/list [post]
  199. func GetUserList(c *gin.Context) {
  200. var u model.User
  201. jsonData := struct {
  202. Uid []string `json:"uid"`
  203. }{}
  204. err := c.ShouldBindJSON(&jsonData)
  205. if err != nil {
  206. msg := err.Error()
  207. response.Fail(c.Writer, msg, 500)
  208. return
  209. }
  210. userInfo, err := u.GetUserList(jsonData.Uid)
  211. if err != nil {
  212. msg := err.Error()
  213. response.Fail(c.Writer, msg, 500)
  214. return
  215. }
  216. response.Success(c.Writer, "success", gin.H{"users": userInfo})
  217. }