feat: Enhance user update handling and introduce NullString type for optional fields
This commit is contained in:
@@ -163,11 +163,38 @@ func (h *UserHandler) UpdateUser(c *gin.Context) {
|
||||
// Set ID from URL
|
||||
userUpdateDTO.ID = id.String()
|
||||
|
||||
// Convert DTO to model
|
||||
userUpdate := convertUpdateDTOToModel(userUpdateDTO)
|
||||
// Set ID from URL
|
||||
userUpdateDTO.ID = id.String()
|
||||
|
||||
// Convert DTO to Model
|
||||
idWrapper := models.FromULID(id)
|
||||
update := models.UserUpdate{
|
||||
ID: idWrapper,
|
||||
}
|
||||
|
||||
if userUpdateDTO.Email != nil {
|
||||
update.Email = userUpdateDTO.Email
|
||||
}
|
||||
if userUpdateDTO.Password != nil {
|
||||
update.Password = userUpdateDTO.Password
|
||||
}
|
||||
if userUpdateDTO.Role != nil {
|
||||
update.Role = userUpdateDTO.Role
|
||||
}
|
||||
if userUpdateDTO.CompanyID != nil {
|
||||
companyID, err := models.ULIDWrapperFromString(*userUpdateDTO.CompanyID)
|
||||
if err != nil {
|
||||
utils.BadRequestResponse(c, "Invalid company ID format")
|
||||
return
|
||||
}
|
||||
update.CompanyID = &companyID
|
||||
}
|
||||
if userUpdateDTO.HourlyRate != nil {
|
||||
update.HourlyRate = userUpdateDTO.HourlyRate
|
||||
}
|
||||
|
||||
// Update user in the database
|
||||
user, err := models.UpdateUser(c.Request.Context(), userUpdate)
|
||||
user, err := models.UpdateUser(c.Request.Context(), update)
|
||||
if err != nil {
|
||||
utils.InternalErrorResponse(c, "Error updating user: "+err.Error())
|
||||
return
|
||||
@@ -348,20 +375,27 @@ func (h *UserHandler) GetCurrentUser(c *gin.Context) {
|
||||
// Helper functions for DTO conversion
|
||||
|
||||
func convertUserToDTO(user *models.User) dto.UserDto {
|
||||
var companyID *string
|
||||
if user.CompanyID != nil {
|
||||
s := user.CompanyID.String()
|
||||
companyID = &s
|
||||
}
|
||||
return dto.UserDto{
|
||||
ID: user.ID.String(),
|
||||
CreatedAt: user.CreatedAt,
|
||||
UpdatedAt: user.UpdatedAt,
|
||||
Email: user.Email,
|
||||
Role: user.Role,
|
||||
CompanyID: user.CompanyID.String(),
|
||||
CompanyID: companyID,
|
||||
HourlyRate: user.HourlyRate,
|
||||
}
|
||||
}
|
||||
|
||||
func convertCreateDTOToModel(dto dto.UserCreateDto) models.UserCreate {
|
||||
// Convert CompanyID from int to ULID (this is a simplification, adjust as needed)
|
||||
companyID, _ := models.ULIDWrapperFromString(dto.CompanyID)
|
||||
var companyID models.ULIDWrapper
|
||||
if dto.CompanyID != nil {
|
||||
companyID, _ = models.ULIDWrapperFromString(*dto.CompanyID) // Ignoring error, validation happens in the model
|
||||
}
|
||||
|
||||
return models.UserCreate{
|
||||
Email: dto.Email,
|
||||
@@ -371,34 +405,3 @@ func convertCreateDTOToModel(dto dto.UserCreateDto) models.UserCreate {
|
||||
HourlyRate: dto.HourlyRate,
|
||||
}
|
||||
}
|
||||
|
||||
func convertUpdateDTOToModel(dto dto.UserUpdateDto) models.UserUpdate {
|
||||
id, _ := ulid.Parse(dto.ID)
|
||||
update := models.UserUpdate{
|
||||
ID: models.FromULID(id),
|
||||
}
|
||||
|
||||
if dto.Email != nil {
|
||||
update.Email = dto.Email
|
||||
}
|
||||
|
||||
if dto.Password != nil {
|
||||
update.Password = dto.Password
|
||||
}
|
||||
|
||||
if dto.Role != nil {
|
||||
update.Role = dto.Role
|
||||
}
|
||||
|
||||
if dto.CompanyID != nil {
|
||||
// Convert CompanyID from int to ULID (this is a simplification, adjust as needed)
|
||||
companyID, _ := models.ULIDWrapperFromString(*dto.CompanyID)
|
||||
update.CompanyID = &companyID
|
||||
}
|
||||
|
||||
if dto.HourlyRate != nil {
|
||||
update.HourlyRate = dto.HourlyRate
|
||||
}
|
||||
|
||||
return update
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user