Files
nunu-layout-advanced/internal/handler/user.go
2023-08-26 12:18:01 +08:00

104 lines
2.5 KiB
Go

package handler
import (
"github.com/gin-gonic/gin"
"github.com/go-nunu/nunu-layout-advanced/internal/pkg/request"
"github.com/go-nunu/nunu-layout-advanced/internal/pkg/response"
"github.com/go-nunu/nunu-layout-advanced/internal/service"
"net/http"
)
type UserHandler interface {
Register(ctx *gin.Context)
Login(ctx *gin.Context)
GetProfile(ctx *gin.Context)
UpdateProfile(ctx *gin.Context)
}
func NewUserHandler(handler *Handler, userService service.UserService) UserHandler {
return &userHandler{
Handler: handler,
userService: userService,
}
}
type userHandler struct {
*Handler
userService service.UserService
}
// Register godoc
// @Summary ping example
// @Schemes
// @Description do ping
// @Tags example
// @Accept json
// @Produce json
// @Success 200 {string} Helloworld
// @Router /example/helloworld [get]
func (h *userHandler) Register(ctx *gin.Context) {
req := new(request.RegisterRequest)
if err := ctx.ShouldBindJSON(req); err != nil {
response.HandleError(ctx, http.StatusBadRequest, response.ErrBadRequest, nil)
return
}
if err := h.userService.Register(ctx, req); err != nil {
response.HandleError(ctx, http.StatusBadRequest, response.ErrBadRequest, nil)
return
}
response.HandleSuccess(ctx, nil)
}
func (h *userHandler) Login(ctx *gin.Context) {
var req request.LoginRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, http.StatusBadRequest, response.ErrBadRequest, nil)
return
}
token, err := h.userService.Login(ctx, &req)
if err != nil {
response.HandleError(ctx, http.StatusUnauthorized, response.ErrUnauthorized, nil)
return
}
response.HandleSuccess(ctx, gin.H{
"accessToken": token,
})
}
func (h *userHandler) GetProfile(ctx *gin.Context) {
userId := GetUserIdFromCtx(ctx)
if userId == "" {
response.HandleError(ctx, http.StatusUnauthorized, response.ErrUnauthorized, nil)
return
}
user, err := h.userService.GetProfile(ctx, userId)
if err != nil {
response.HandleError(ctx, http.StatusBadRequest, response.ErrBadRequest, nil)
return
}
response.HandleSuccess(ctx, user)
}
func (h *userHandler) UpdateProfile(ctx *gin.Context) {
userId := GetUserIdFromCtx(ctx)
var req request.UpdateProfileRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, http.StatusBadRequest, response.ErrBadRequest, nil)
return
}
if err := h.userService.UpdateProfile(ctx, userId, &req); err != nil {
response.HandleError(ctx, http.StatusInternalServerError, response.ErrInternalServerError, nil)
return
}
response.HandleSuccess(ctx, nil)
}