user.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package handler
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/go-nunu/nunu-layout-advanced/api/v1"
  5. "github.com/go-nunu/nunu-layout-advanced/internal/service"
  6. "go.uber.org/zap"
  7. "net/http"
  8. )
  9. type UserHandler struct {
  10. *Handler
  11. userService service.UserService
  12. }
  13. func NewUserHandler(handler *Handler, userService service.UserService) *UserHandler {
  14. return &UserHandler{
  15. Handler: handler,
  16. userService: userService,
  17. }
  18. }
  19. // Register godoc
  20. // @Summary 用户注册
  21. // @Schemes
  22. // @Description 目前只支持邮箱登录
  23. // @Tags 用户模块
  24. // @Accept json
  25. // @Produce json
  26. // @Param request body v1.RegisterRequest true "params"
  27. // @Success 200 {object} v1.Response
  28. // @Router /register [post]
  29. func (h *UserHandler) Register(ctx *gin.Context) {
  30. req := new(v1.RegisterRequest)
  31. if err := ctx.ShouldBindJSON(req); err != nil {
  32. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
  33. return
  34. }
  35. if err := h.userService.Register(ctx, req); err != nil {
  36. h.logger.WithContext(ctx).Error("userService.Register error", zap.Error(err))
  37. v1.HandleError(ctx, http.StatusInternalServerError, err, nil)
  38. return
  39. }
  40. v1.HandleSuccess(ctx, nil)
  41. }
  42. // Login godoc
  43. // @Summary 账号登录
  44. // @Schemes
  45. // @Description
  46. // @Tags 用户模块
  47. // @Accept json
  48. // @Produce json
  49. // @Param request body v1.LoginRequest true "params"
  50. // @Success 200 {object} v1.LoginResponse
  51. // @Router /login [post]
  52. func (h *UserHandler) Login(ctx *gin.Context) {
  53. var req v1.LoginRequest
  54. if err := ctx.ShouldBindJSON(&req); err != nil {
  55. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
  56. return
  57. }
  58. token, err := h.userService.Login(ctx, &req)
  59. if err != nil {
  60. v1.HandleError(ctx, http.StatusUnauthorized, v1.ErrUnauthorized, nil)
  61. return
  62. }
  63. v1.HandleSuccess(ctx, v1.LoginResponseData{
  64. AccessToken: token,
  65. })
  66. }
  67. // GetProfile godoc
  68. // @Summary 获取用户信息
  69. // @Schemes
  70. // @Description
  71. // @Tags 用户模块
  72. // @Accept json
  73. // @Produce json
  74. // @Security Bearer
  75. // @Success 200 {object} v1.GetProfileResponse
  76. // @Router /user [get]
  77. func (h *UserHandler) GetProfile(ctx *gin.Context) {
  78. userId := GetUserIdFromCtx(ctx)
  79. if userId == "" {
  80. v1.HandleError(ctx, http.StatusUnauthorized, v1.ErrUnauthorized, nil)
  81. return
  82. }
  83. user, err := h.userService.GetProfile(ctx, userId)
  84. if err != nil {
  85. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
  86. return
  87. }
  88. v1.HandleSuccess(ctx, user)
  89. }
  90. // UpdateProfile godoc
  91. // @Summary 修改用户信息
  92. // @Schemes
  93. // @Description
  94. // @Tags 用户模块
  95. // @Accept json
  96. // @Produce json
  97. // @Security Bearer
  98. // @Param request body v1.UpdateProfileRequest true "params"
  99. // @Success 200 {object} v1.Response
  100. // @Router /user [put]
  101. func (h *UserHandler) UpdateProfile(ctx *gin.Context) {
  102. userId := GetUserIdFromCtx(ctx)
  103. var req v1.UpdateProfileRequest
  104. if err := ctx.ShouldBindJSON(&req); err != nil {
  105. v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
  106. return
  107. }
  108. if err := h.userService.UpdateProfile(ctx, userId, &req); err != nil {
  109. v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
  110. return
  111. }
  112. v1.HandleSuccess(ctx, nil)
  113. }