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
:
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 {@NotNullprivate 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;@NotNullprivate 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 ...