diff --git a/internal/controllers/user_controller.go b/internal/controllers/user_controller.go index 803d676..c890498 100644 --- a/internal/controllers/user_controller.go +++ b/internal/controllers/user_controller.go @@ -72,7 +72,8 @@ func (uc *UserController) UpdateHandler(c *gin.Context) { // user.RoleID = existingUser.RoleID // } - updatedUser, err := uc.Service.UpdateUser(&user) + updatedUser, err := uc.Service.UpdateUser(&user, userRole) + if err != nil { switch err { case errors.ErrUserNotFound: diff --git a/internal/services/user_service.go b/internal/services/user_service.go index 2c04153..2a31ba7 100644 --- a/internal/services/user_service.go +++ b/internal/services/user_service.go @@ -31,9 +31,10 @@ type UserService struct { Repo repositories.UserRepositoryInterface } -func (service *UserService) UpdateUser(user *models.User) (*models.User, error) { +func (service *UserService) UpdateUser(user *models.User, userRole int8) (*models.User, error) { - if err := validateUserData(user); err != nil { + if err := validateUserData(user, userRole); err != nil { + logger.Error.Printf("Failed to validate user data: %v", err) return nil, errors.ErrInvalidUserData } @@ -58,8 +59,8 @@ func (service *UserService) UpdateUser(user *models.User) (*models.User, error) return updatedUser, nil } - if err := validateUserData(user); err != nil { func (service *UserService) RegisterUser(user *models.User) (uint, string, error) { + if err := validateUserData(user, user.RoleID); err != nil { return http.StatusNotAcceptable, "", err } @@ -68,7 +69,6 @@ func (service *UserService) RegisterUser(user *models.User) (uint, string, error user.Status = constants.UnverifiedStatus user.CreatedAt = time.Now() user.UpdatedAt = time.Now() - id, err := service.Repo.CreateUser(user) if err != nil && strings.Contains(err.Error(), "UNIQUE constraint failed") { @@ -150,15 +150,23 @@ func (service *UserService) VerifyUser(token *string) (*models.User, error) { return user, nil } -func validateUserData(user *models.User) error { +func validateUserData(user *models.User, userRole int8) error { validate := validator.New() - validate.RegisterValidation("age", utils.AgeValidator) - validate.RegisterValidation("bic", utils.BICValidator) - validate.RegisterValidation("iban", utils.IBANValidator) - validate.RegisterValidation("subscriptionModel", utils.SubscriptionModelValidator) validate.RegisterValidation("safe_content", utils.ValidateSafeContent) - validate.RegisterValidation("membershipField", utils.ValidateRequiredMembershipField) + if userRole == constants.Roles.Admin { + validate.RegisterValidation("membershipField", utils.ValidateToTrue) + validate.RegisterValidation("age", utils.ValidateToTrue) + validate.RegisterValidation("bic", utils.ValidateToTrue) + validate.RegisterValidation("subscriptionModel", utils.ValidateToTrue) + validate.RegisterValidation("iban", utils.ValidateToTrue) + } else { + validate.RegisterValidation("membershipField", utils.ValidateRequiredMembershipField) + validate.RegisterValidation("age", utils.AgeValidator) + validate.RegisterValidation("bic", utils.BICValidator) + validate.RegisterValidation("subscriptionModel", utils.SubscriptionModelValidator) + validate.RegisterValidation("iban", utils.IBANValidator) + } return validate.Struct(user) }