feat(user): Implement user creation functionality in UserController and UserService
Deploy Application / deploy (push) Successful in 22s Details

This commit is contained in:
Habib Fatkhul Rohman 2025-11-03 15:37:18 +07:00
parent d110a31c4f
commit 795d8d05e3
3 changed files with 70 additions and 1 deletions

View File

@ -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{

View File

@ -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)

View File

@ -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,