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  }