user.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package handler
  2. import (
  3. "net/http"
  4. "github.com/gin-gonic/gin"
  5. "newaterobot-process/service"
  6. )
  7. var userService = service.NewUserService()
  8. // Register 用户注册处理器
  9. func Register(c *gin.Context) {
  10. // 定义请求参数结构体
  11. var req struct {
  12. Username string `json:"username" binding:"required"`
  13. Password string `json:"password" binding:"required"`
  14. Email string `json:"email"`
  15. Nickname string `json:"nickname"`
  16. }
  17. // 绑定参数
  18. if err := c.ShouldBindJSON(&req); err != nil {
  19. c.JSON(http.StatusBadRequest, gin.H{
  20. "code": 400,
  21. "message": "请求参数错误: " + err.Error(),
  22. })
  23. return
  24. }
  25. // 调用服务注册用户
  26. user, err := userService.Register(req.Username, req.Password, req.Email, req.Nickname)
  27. if err != nil {
  28. c.JSON(http.StatusInternalServerError, gin.H{
  29. "code": 500,
  30. "message": "注册失败: " + err.Error(),
  31. })
  32. return
  33. }
  34. // 返回成功响应
  35. c.JSON(http.StatusOK, gin.H{
  36. "code": 200,
  37. "message": "注册成功",
  38. "data": gin.H{
  39. "id": user.ID,
  40. "username": user.Username,
  41. "email": user.Email,
  42. "nickname": user.Nickname,
  43. },
  44. })
  45. }
  46. // Login 用户登录处理器
  47. func Login(c *gin.Context) {
  48. // 定义请求参数结构体
  49. var req struct {
  50. Username string `json:"username" binding:"required"`
  51. Password string `json:"password" binding:"required"`
  52. }
  53. // 绑定参数
  54. if err := c.ShouldBindJSON(&req); err != nil {
  55. c.JSON(http.StatusBadRequest, gin.H{
  56. "code": 400,
  57. "message": "请求参数错误: " + err.Error(),
  58. })
  59. return
  60. }
  61. // 调用服务登录
  62. token, err := userService.Login(req.Username, req.Password)
  63. if err != nil {
  64. c.JSON(http.StatusUnauthorized, gin.H{
  65. "code": 401,
  66. "message": "登录失败: " + err.Error(),
  67. })
  68. return
  69. }
  70. // 返回成功响应
  71. c.JSON(http.StatusOK, gin.H{
  72. "code": 200,
  73. "message": "登录成功",
  74. "data": gin.H{
  75. "token": token,
  76. },
  77. })
  78. }
  79. // GetUserInfo 获取用户信息处理器
  80. func GetUserInfo(c *gin.Context) {
  81. // 从上下文获取用户ID
  82. userIDStr, exists := c.Get("user_id")
  83. if !exists {
  84. c.JSON(http.StatusUnauthorized, gin.H{
  85. "code": 401,
  86. "message": "用户未认证",
  87. })
  88. return
  89. }
  90. // 转换用户ID类型
  91. userID, ok := userIDStr.(uint)
  92. if !ok {
  93. c.JSON(http.StatusInternalServerError, gin.H{
  94. "code": 500,
  95. "message": "用户ID类型错误",
  96. })
  97. return
  98. }
  99. // 调用服务获取用户信息
  100. user, err := userService.GetUserByID(userID)
  101. if err != nil {
  102. c.JSON(http.StatusInternalServerError, gin.H{
  103. "code": 500,
  104. "message": "获取用户信息失败: " + err.Error(),
  105. })
  106. return
  107. }
  108. // 返回成功响应
  109. c.JSON(http.StatusOK, gin.H{
  110. "code": 200,
  111. "message": "获取成功",
  112. "data": gin.H{
  113. "id": user.ID,
  114. "username": user.Username,
  115. "email": user.Email,
  116. "nickname": user.Nickname,
  117. "status": user.Status,
  118. "createdat": user.CreatedAt,
  119. },
  120. })
  121. }