From 8322bbef18bdd962349af3931fc28ff5a77c6cbd Mon Sep 17 00:00:00 2001 From: Aditya Siregar Date: Fri, 15 Aug 2025 22:53:40 +0700 Subject: [PATCH] Add users --- internal/contract/user_contract.go | 1 + internal/entities/user.go | 1 + internal/processor/user_processor.go | 1 + internal/router/router.go | 2 +- internal/transformer/user_transformer.go | 3 +++ 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/contract/user_contract.go b/internal/contract/user_contract.go index 013acde..ae18cb5 100644 --- a/internal/contract/user_contract.go +++ b/internal/contract/user_contract.go @@ -49,6 +49,7 @@ type LoginResponse struct { type UserResponse struct { ID uuid.UUID `json:"id"` + Username string `json:"username"` Name string `json:"name"` Email string `json:"email"` IsActive bool `json:"is_active"` diff --git a/internal/entities/user.go b/internal/entities/user.go index 4247b01..6ef8d39 100644 --- a/internal/entities/user.go +++ b/internal/entities/user.go @@ -41,6 +41,7 @@ func (p *Permissions) Scan(value interface{}) error { type User struct { ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"` + Username string `gorm:"uniqueIndex;not null;size:100" json:"username" validate:"required,min=1,max=100"` Name string `gorm:"not null;size:255" json:"name" validate:"required,min=1,max=255"` Email string `gorm:"uniqueIndex;not null;size:255" json:"email" validate:"required,email"` PasswordHash string `gorm:"not null;size:255" json:"-"` diff --git a/internal/processor/user_processor.go b/internal/processor/user_processor.go index c20fe33..2e9c91b 100644 --- a/internal/processor/user_processor.go +++ b/internal/processor/user_processor.go @@ -351,6 +351,7 @@ func (p *UserProcessorImpl) BulkCreateUsersWithTransaction(ctx context.Context, user := &entities.User{ ID: uuid.New(), + Username: req.Email, Name: req.Name, Email: req.Email, PasswordHash: string(hashedPassword), diff --git a/internal/router/router.go b/internal/router/router.go index 112241a..d730ca7 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -81,7 +81,7 @@ func (r *Router) addAppRoutes(rg *gin.Engine) { users.Use(r.authMiddleware.RequireAuth()) { users.GET("", r.userHandler.ListUsers) - users.POST("/bulk", r.userHandler.BulkCreateUsers) + users.POST("/bulk", r.userHandler.BulkCreateUsersAsync) users.POST("/bulk/async", r.userHandler.BulkCreateUsersAsync) users.GET("/bulk/job/:jobId", r.userHandler.GetBulkJobStatus) users.GET("/profile", r.userHandler.GetProfile) diff --git a/internal/transformer/user_transformer.go b/internal/transformer/user_transformer.go index 95a6ca4..9fa25cc 100644 --- a/internal/transformer/user_transformer.go +++ b/internal/transformer/user_transformer.go @@ -10,6 +10,7 @@ func CreateUserRequestToEntity(req *contract.CreateUserRequest, passwordHash str return nil } return &entities.User{ + Username: req.Email, Name: req.Name, Email: req.Email, PasswordHash: passwordHash, @@ -26,6 +27,7 @@ func UpdateUserEntity(existing *entities.User, req *contract.UpdateUserRequest) } if req.Email != nil { existing.Email = *req.Email + existing.Username = *req.Email } if req.IsActive != nil { existing.IsActive = *req.IsActive @@ -40,6 +42,7 @@ func EntityToContract(user *entities.User) *contract.UserResponse { resp := &contract.UserResponse{ ID: user.ID, + Username: user.Username, Name: user.Name, Email: user.Email, IsActive: user.IsActive,