github.com/lovung/GoCleanArchitecture@v0.0.0-20210302152432-50d91fd29f9f/app/internal/interface/restful/handler/auth_handler.go (about) 1 package handler 2 3 import ( 4 "net/http" 5 6 "github.com/lovung/GoCleanArchitecture/app/internal/interface/restful/presenter" 7 "github.com/lovung/GoCleanArchitecture/app/internal/usecase" 8 "github.com/lovung/GoCleanArchitecture/app/internal/usecase/dto" 9 "github.com/lovung/GoCleanArchitecture/pkg/copier" 10 11 "github.com/gin-gonic/gin" 12 ) 13 14 // AuthHandler handles the authentication/authorization requests 15 type AuthHandler struct { 16 BaseHandler 17 userUseCase usecase.UserUseCase 18 } 19 20 // NewAuthHandler constructor 21 func NewAuthHandler( 22 userUseCase usecase.UserUseCase, 23 ) AuthHandler { 24 return AuthHandler{ 25 userUseCase: userUseCase, 26 } 27 } 28 29 // Register function in handler to register API 30 // @Summary Register the new user 31 // @Description Register the new user 32 // @Tags auth 33 // @Accept json 34 // @Produce json 35 // @Param Authorization header string true "Bearer jwt_access_token" 36 // @Param body body presenter.RegisterRequest true "Body of request" 37 // @Success 201 {object} presenter.UserInformation 38 // @Failure 400 {object} presenter.Error 39 // @Router /register [post] 40 func (hdl *AuthHandler) Register(ctx *gin.Context) { 41 var ( 42 req presenter.RegisterRequest 43 res presenter.UserInformation 44 dtoReq dto.CreateUserRequest 45 err error 46 ) 47 defer func() { 48 hdl.SetError(ctx, err) 49 }() 50 51 if err = ctx.ShouldBindJSON(&req); err != nil { 52 return 53 } 54 55 copier.MustCopy(&dtoReq, &req) 56 resDto, err := hdl.userUseCase.Create(ctx.Request.Context(), dtoReq) 57 if err != nil { 58 return 59 } 60 copier.MustCopy(&res, &resDto) 61 hdl.SetData(ctx, res) 62 hdl.SetMeta(ctx, presenter.MetaResponse{ 63 Code: http.StatusCreated, 64 }) 65 }