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)
Update(ctx *gin.Context)
Delete(ctx *gin.Context)
Create(ctx *gin.Context)
}
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 {
db := do.MustInvokeNamed[*gorm.DB](injector, constants.DB)
return &userController{

View File

@ -15,7 +15,7 @@ func RegisterRoutes(server *gin.Engine, injector *do.Injector) {
userRoutes := server.Group("/api/v1/users")
{
// userRoutes.POST("", userController.Register)
userRoutes.POST("", middlewares.Authenticate(jwtService), userController.Create)
// userRoutes.POST("/login", userController.Login)
// userRoutes.POST("/verify-email", userController.VerifyEmail)
userRoutes.GET("", middlewares.Authenticate(jwtService), userController.GetAllUser)

View File

@ -19,6 +19,7 @@ import (
)
type UserService interface {
Create(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)
Verify(ctx context.Context, req dto.UserLoginRequest) (authDto.TokenResponse, error)
@ -37,6 +38,55 @@ type userService struct {
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(
userRepo repository.UserRepository,
refreshTokenRepo authRepo.RefreshTokenRepository,