RegisterRequest.java
package com.ctrlbuy.webshop.dto;
import jakarta.validation.constraints.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RegisterRequest {
@NotBlank(message = "Användarnamn är obligatoriskt")
@Size(min = 3, max = 50, message = "Användarnamn måste vara mellan 3 och 50 tecken")
@Pattern(regexp = "^[a-zA-Z0-9_-]+$", message = "Användarnamn får endast innehålla bokstäver, siffror, underscore och bindestreck")
private String username;
@NotBlank(message = "E-post är obligatorisk")
@Email(message = "Ogiltig e-postadress")
@Size(max = 100, message = "E-postadressen är för lång")
private String email;
@NotBlank(message = "Förnamn är obligatoriskt")
@Size(min = 1, max = 100, message = "Förnamn måste vara mellan 1 och 100 tecken")
private String firstName;
@NotBlank(message = "Efternamn är obligatoriskt")
@Size(min = 1, max = 100, message = "Efternamn måste vara mellan 1 och 100 tecken")
private String lastName;
@NotBlank(message = "Lösenord är obligatoriskt")
@Size(min = 6, message = "Lösenord måste vara minst 6 tecken")
private String password;
@NotBlank(message = "Bekräfta lösenord")
private String confirmPassword;
// Terms and conditions acceptance
private boolean acceptTerms = false;
/**
* Trimma alla textfält för att ta bort extra mellanslag
*/
public void trimAllFields() {
if (this.username != null) {
this.username = this.username.trim();
}
if (this.email != null) {
this.email = this.email.trim();
}
if (this.firstName != null) {
this.firstName = this.firstName.trim();
}
if (this.lastName != null) {
this.lastName = this.lastName.trim();
}
// Trimma INTE lösenord - kan innehålla betydelsefulla mellanslag
}
/**
* Kontrollera om lösenorden matchar
*/
public boolean isPasswordMatching() {
return password != null && password.equals(confirmPassword);
}
/**
* Få fullständigt namn
*/
public String getFullName() {
StringBuilder fullName = new StringBuilder();
if (firstName != null && !firstName.trim().isEmpty()) {
fullName.append(firstName.trim());
}
if (lastName != null && !lastName.trim().isEmpty()) {
if (fullName.length() > 0) {
fullName.append(" ");
}
fullName.append(lastName.trim());
}
return fullName.toString();
}
/**
* Validera att alla obligatoriska fält är ifyllda
*/
public boolean isValid() {
return username != null && !username.trim().isEmpty() &&
email != null && !email.trim().isEmpty() &&
firstName != null && !firstName.trim().isEmpty() &&
lastName != null && !lastName.trim().isEmpty() &&
password != null && password.length() >= 6 &&
confirmPassword != null && isPasswordMatching() &&
acceptTerms; // Terms måste vara accepterade
}
/**
* Kontrollera om användarvillkoren är accepterade
*/
public boolean isAcceptTerms() {
return acceptTerms;
}
/**
* Sätt användarvillkor
*/
public void setAcceptTerms(boolean acceptTerms) {
this.acceptTerms = acceptTerms;
}
/**
* Normalisera e-post (gemener och trimning)
*/
public void normalizeEmail() {
if (this.email != null) {
this.email = this.email.trim().toLowerCase();
}
}
@Override
public String toString() {
return "RegisterRequest{" +
"username='" + username + '\'' +
", email='" + email + '\'' +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", password='[PROTECTED]'" +
", confirmPassword='[PROTECTED]'" +
'}';
}
}