feat(user): Implement user creation functionality in UserController and UserService
Deploy Application / deploy (push) Successful in 22s
Details
Deploy Application / deploy (push) Successful in 22s
Details
This commit is contained in:
parent
d110a31c4f
commit
795d8d05e3
|
|
@ -28,6 +28,7 @@ type (
|
||||||
VerifyEmail(ctx *gin.Context)
|
VerifyEmail(ctx *gin.Context)
|
||||||
Update(ctx *gin.Context)
|
Update(ctx *gin.Context)
|
||||||
Delete(ctx *gin.Context)
|
Delete(ctx *gin.Context)
|
||||||
|
Create(ctx *gin.Context)
|
||||||
}
|
}
|
||||||
|
|
||||||
userController struct {
|
userController struct {
|
||||||
|
|
@ -36,6 +37,24 @@ type (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Create implements UserController.
|
||||||
|
func (c *userController) Create(ctx *gin.Context) {
|
||||||
|
var req dto.UserCreateRequest
|
||||||
|
if err := ctx.ShouldBind(&req); err != nil {
|
||||||
|
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_GET_DATA_FROM_BODY, err.Error(), nil)
|
||||||
|
ctx.AbortWithStatusJSON(http.StatusBadRequest, res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
created, err := c.userService.Register(ctx.Request.Context(), req)
|
||||||
|
if err != nil {
|
||||||
|
res := utils.BuildResponseFailed(dto.MESSAGE_FAILED_REGISTER_USER, err.Error(), nil)
|
||||||
|
ctx.JSON(http.StatusInternalServerError, res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res := utils.BuildResponseSuccess(dto.MESSAGE_SUCCESS_REGISTER_USER, created)
|
||||||
|
ctx.JSON(http.StatusOK, res)
|
||||||
|
}
|
||||||
|
|
||||||
func NewUserController(injector *do.Injector, us service.UserService) UserController {
|
func NewUserController(injector *do.Injector, us service.UserService) UserController {
|
||||||
db := do.MustInvokeNamed[*gorm.DB](injector, constants.DB)
|
db := do.MustInvokeNamed[*gorm.DB](injector, constants.DB)
|
||||||
return &userController{
|
return &userController{
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ func RegisterRoutes(server *gin.Engine, injector *do.Injector) {
|
||||||
|
|
||||||
userRoutes := server.Group("/api/v1/users")
|
userRoutes := server.Group("/api/v1/users")
|
||||||
{
|
{
|
||||||
// userRoutes.POST("", userController.Register)
|
userRoutes.POST("", middlewares.Authenticate(jwtService), userController.Create)
|
||||||
// userRoutes.POST("/login", userController.Login)
|
// userRoutes.POST("/login", userController.Login)
|
||||||
// userRoutes.POST("/verify-email", userController.VerifyEmail)
|
// userRoutes.POST("/verify-email", userController.VerifyEmail)
|
||||||
userRoutes.GET("", middlewares.Authenticate(jwtService), userController.GetAllUser)
|
userRoutes.GET("", middlewares.Authenticate(jwtService), userController.GetAllUser)
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserService interface {
|
type UserService interface {
|
||||||
|
Create(ctx context.Context, req dto.UserCreateRequest) (dto.UserResponse, error)
|
||||||
Register(ctx context.Context, req dto.UserCreateRequest) (dto.UserResponse, error)
|
Register(ctx context.Context, req dto.UserCreateRequest) (dto.UserResponse, error)
|
||||||
GetUserById(ctx context.Context, userId string) (dto.UserResponse, error)
|
GetUserById(ctx context.Context, userId string) (dto.UserResponse, error)
|
||||||
Verify(ctx context.Context, req dto.UserLoginRequest) (authDto.TokenResponse, error)
|
Verify(ctx context.Context, req dto.UserLoginRequest) (authDto.TokenResponse, error)
|
||||||
|
|
@ -37,6 +38,55 @@ type userService struct {
|
||||||
db *gorm.DB
|
db *gorm.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create implements UserService.
|
||||||
|
// Create implements UserService.
|
||||||
|
func (s *userService) Create(ctx context.Context, req dto.UserCreateRequest) (dto.UserResponse, error) {
|
||||||
|
// Cek apakah email sudah terdaftar
|
||||||
|
// _, exists, err := s.userRepository.CheckEmail(ctx, s.db, req.Email)
|
||||||
|
// if err != nil && err != gorm.ErrRecordNotFound {
|
||||||
|
// return dto.UserResponse{}, err
|
||||||
|
// }
|
||||||
|
// if exists {
|
||||||
|
// return dto.UserResponse{}, dto.ErrEmailAlreadyExists
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Hash password
|
||||||
|
hashedPassword, err := utils.HashPassword(req.Password)
|
||||||
|
if err != nil {
|
||||||
|
return dto.UserResponse{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
user := entities.M_User{
|
||||||
|
Name: req.Name,
|
||||||
|
Username: req.Username,
|
||||||
|
Email: req.Email,
|
||||||
|
Password: hashedPassword,
|
||||||
|
Gender: req.Gender,
|
||||||
|
Address: req.Address,
|
||||||
|
Phone: req.Phone,
|
||||||
|
PhotoUrl: req.PhotoUrl,
|
||||||
|
ClientID: req.ClientID,
|
||||||
|
MaintenanceGroupUserID: req.MaintenanceGroupUserID,
|
||||||
|
LocationID: req.LocationID,
|
||||||
|
}
|
||||||
|
|
||||||
|
createdUser, err := s.userRepository.Register(ctx, s.db, user)
|
||||||
|
if err != nil {
|
||||||
|
return dto.UserResponse{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return dto.UserResponse{
|
||||||
|
ID: createdUser.ID.String(),
|
||||||
|
Name: createdUser.Name,
|
||||||
|
Username: createdUser.Username,
|
||||||
|
Email: createdUser.Email,
|
||||||
|
Phone: createdUser.Phone,
|
||||||
|
Gender: createdUser.Gender,
|
||||||
|
Address: createdUser.Address,
|
||||||
|
PhotoUrl: createdUser.PhotoUrl,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func NewUserService(
|
func NewUserService(
|
||||||
userRepo repository.UserRepository,
|
userRepo repository.UserRepository,
|
||||||
refreshTokenRepo authRepo.RefreshTokenRepository,
|
refreshTokenRepo authRepo.RefreshTokenRepository,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue