usercontroller.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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. if err != nil {
  47. msg := err.Error()
  48. response.Fail(c.Writer, msg, 500)
  49. return
  50. } else {
  51. msg := "register succeed"
  52. response.Success(c.Writer, msg, nil)
  53. }
  54. }
  55. type NewRec struct {
  56. Uid uint `json:"uid"`
  57. CIds []uint `json:"cIds"`
  58. }
  59. // NewRecommend
  60. // @Tags 用户模块
  61. // @Summary 初始化用户推荐数据
  62. // @Produce application/json
  63. // @param data body NewRec false "推荐信息"
  64. // @Success 200 {object} response.Response
  65. // @Router /user/rec/new [post]
  66. func NewRecommend(c *gin.Context) {
  67. jsonData := NewRec{}
  68. err := c.ShouldBind(&jsonData)
  69. if err != nil {
  70. msg := err.Error()
  71. response.Fail(c.Writer, msg, 500)
  72. return
  73. }
  74. err = model.NewRecommend(jsonData.Uid, jsonData.CIds)
  75. if err != nil {
  76. msg := err.Error()
  77. response.Fail(c.Writer, msg, 500)
  78. return
  79. }
  80. response.Success(c.Writer, "success", nil)
  81. }
  82. // Login
  83. // @Tags 用户模块
  84. // @Summary 登录
  85. // @Produce application/json
  86. // @param vid formData string false "微信ID"
  87. // @Success 200 {object} response.Response
  88. // @Router /user/login [post]
  89. func Login(c *gin.Context) {
  90. var user model.User
  91. user.Vid = c.PostForm("vid")
  92. err, nu := user.Login()
  93. if err != nil && err.Error() == "sql: no rows in result set" {
  94. err = util.NoSuchUserError
  95. msg := err.Error()
  96. response.Fail(c.Writer, msg, 403)
  97. return
  98. }
  99. if err != nil {
  100. msg := err.Error()
  101. response.Fail(c.Writer, msg, 500)
  102. return
  103. }
  104. token, err := util.CreatToken(nu.Uid)
  105. if err != nil {
  106. msg := err.Error()
  107. response.Fail(c.Writer, msg, 500)
  108. return
  109. }
  110. data := gin.H{
  111. "token": token,
  112. "user_info": nu,
  113. }
  114. response.Success(c.Writer, "success", data)
  115. }
  116. // ModifyUser
  117. // @Tags 用户模块
  118. // @Summary 修改用户信息
  119. // @Accept application/json
  120. // @Produce application/json
  121. // @param json body model.User true "用户信息"
  122. // @Success 200 {object} response.Response
  123. // @Router /user/modify [post]
  124. func ModifyUser(c *gin.Context) {
  125. var userJ model.UserJson
  126. err := c.ShouldBindJSON(&userJ)
  127. user := userJ.Change()
  128. if err != nil {
  129. msg := err.Error()
  130. response.Fail(c.Writer, msg, 500)
  131. return
  132. }
  133. if user.Phone != "" {
  134. if !util.CheckMobile(userJ.Phone) {
  135. msg := util.PhoneFormatError.Error()
  136. response.Fail(c.Writer, msg, 400)
  137. return
  138. }
  139. if err := user.SPhone(); err != nil {
  140. if errors.Is(err, util.PhoneBeUsed) {
  141. response.Fail(c.Writer, err.Error(), 403)
  142. } else {
  143. response.Fail(c.Writer, err.Error(), 500)
  144. }
  145. return
  146. }
  147. }
  148. userOld := user.GetUser()
  149. nu, err := user.Modify(&userOld)
  150. if err != nil {
  151. msg := err.Error()
  152. response.Fail(c.Writer, msg, 500)
  153. } else {
  154. msg := "modify succeed"
  155. response.Success(c.Writer, msg, nu)
  156. }
  157. }
  158. // UserInfo
  159. // @Tags 用户模块
  160. // @Summary 获取用户信息
  161. // @Produce application/json
  162. // @Success 200 {object} response.Response
  163. // @Router /user/info [get]
  164. func UserInfo(c *gin.Context) {
  165. var u model.User
  166. token := c.GetHeader("Authorization")
  167. t, claim, err := util.ParseToken(token)
  168. if err != nil {
  169. response.Fail(c.Writer, "failed to parse token", 500)
  170. return
  171. }
  172. if !t.Valid {
  173. response.Fail(c.Writer, "failed", 400)
  174. return
  175. }
  176. u.Uid = claim.UserId
  177. nu, err := u.Info()
  178. if err != nil || nu.Vid == "" {
  179. response.Fail(c.Writer, "failed", 500)
  180. }
  181. response.Success(c.Writer, "success", nu)
  182. }
  183. // GetUserPaged
  184. // @Tags 用户模块
  185. // @Summary 分页用户信息
  186. // @Produce application/json
  187. // @Param page path int true "页数"
  188. // @Param pageSize path int true "一页的大小"
  189. // @Success 200 {object} response.Response
  190. // @Router /user/{page}/{pageSize} [get]
  191. func GetUserPaged(c *gin.Context) {
  192. var user model.User
  193. p := c.Param("page")
  194. pS := c.Param("pageSize")
  195. page, err := strconv.Atoi(p)
  196. pageSize, err := strconv.Atoi(pS)
  197. if err != nil {
  198. response.Fail(c.Writer, err.Error(), 500)
  199. return
  200. }
  201. rsp, err := user.GetPaged(page, pageSize)
  202. if err != nil {
  203. msg := err.Error()
  204. response.Fail(c.Writer, msg, 500)
  205. return
  206. }
  207. cnt, err := user.GetCnt()
  208. if err != nil {
  209. msg := err.Error()
  210. response.Fail(c.Writer, msg, 500)
  211. return
  212. }
  213. if cnt > page*pageSize {
  214. rsp.HNext = true
  215. }
  216. response.Success(c.Writer, "success", rsp)
  217. }
  218. // GetUserList
  219. // @Tags 用户模块
  220. // @Summary 批量获取用户信息
  221. // @Produce application/json
  222. // @Param uid body []string true "用户id列表"
  223. // @Success 200 {object} response.Response
  224. // @Router /user/list [post]
  225. func GetUserList(c *gin.Context) {
  226. var u model.User
  227. jsonData := struct {
  228. Uid []string `json:"uid"`
  229. }{}
  230. err := c.ShouldBindJSON(&jsonData)
  231. if err != nil {
  232. msg := err.Error()
  233. response.Fail(c.Writer, msg, 500)
  234. return
  235. }
  236. userInfo, err := u.GetUserList(jsonData.Uid)
  237. if err != nil {
  238. msg := err.Error()
  239. response.Fail(c.Writer, msg, 500)
  240. return
  241. }
  242. response.Success(c.Writer, "success", gin.H{"users": userInfo})
  243. }