...

/

Refactor the Edit User Implementation

Refactor the Edit User Implementation

Enhance the edit user implementation by refactoring.

Extracting fields

To avoid having to enter the user’s password when editing user details, we’ll do a small refactor. We’ll start by creating an abstract super class with CreateUserFormData extracting most fields except for password and passwordRepeated:

Press + to interact
package com.tamingthymeleaf.application.user.web;
import com.tamingthymeleaf.application.infrastructure.validation.ValidationGroupOne;
import com.tamingthymeleaf.application.infrastructure.validation.ValidationGroupTwo;
import com.tamingthymeleaf.application.user.Gender;
import com.tamingthymeleaf.application.user.UserRole;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.*;
import java.time.LocalDate;
@NotExistingUser(groups = ValidationGroupTwo.class)
public class AbstractUserFormData {
@NotNull
private UserRole userRole; //<.>
@NotBlank
@Size(min = 1, max = 200, groups = ValidationGroupOne.class)
private String firstName;
@NotBlank
@Size(min = 1, max = 200, groups = ValidationGroupOne.class)
private String lastName;
@NotNull
private Gender gender;
@NotBlank
@Email(groups = ValidationGroupOne.class)
private String email;
@NotNull
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthday;
@NotBlank
@Pattern(regexp = "[0-9.\\-() x/+]+", groups = ValidationGroupOne.class)
private String phoneNumber;
public UserRole getUserRole() {
return userRole;
}
public void setUserRole(UserRole userRole) {
this.userRole = userRole;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public LocalDate getBirthday() {
return birthday;
}
public void setBirthday(LocalDate birthday) {
this.birthday = birthday;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}

We’ll keep password and passwordRepeated fields on ...