AccountRequest.java

package cz.vsb.crm.dto;

import cz.vsb.crm.model.Account;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

import java.time.LocalDate;

public record AccountRequest(
        @NotBlank @Size(max = 255) String companyName,
        @Size(max = 255) String industry,
        @Size(max = 2000) String address,
        @Size(max = 50)
        @Pattern(regexp = "^$|^[+]?[0-9\\s\\-()]{6,20}$", message = "must be a valid phone number")
        String phone,
        @Email @Size(max = 255) String email,
        @Size(max = 100) String type,
        @Size(max = 255) String contactName,
        @Email @Size(max = 255) String contactEmail,
        @Size(max = 50)
        @Pattern(regexp = "^$|^[+]?[0-9\\s\\-()]{6,20}$", message = "must be a valid phone number")
        String contactPhone,
        @Size(max = 255) String contactPosition,
        LocalDate deactivatedAt) {

    public Account toEntity() {
        Account account = new Account();
        applyTo(account);
        return account;
    }

    public void applyTo(Account account) {
        account.setCompanyName(companyName);
        account.setIndustry(industry);
        account.setAddress(address);
        account.setPhone(phone);
        account.setEmail(email);
        account.setType(type);
        account.setContactName(contactName);
        account.setContactEmail(contactEmail);
        account.setContactPhone(contactPhone);
        account.setContactPosition(contactPosition);
        account.setDeactivatedAt(deactivatedAt);
    }
}