EmailAddress.java

package com.github.jenkaby.bikerental.customer.domain.model.vo;

import java.util.regex.Pattern;

public record EmailAddress(String value) {

    private static final Pattern EMAIL_PATTERN = Pattern.compile(
            "^[A-Za-z0-9_+&*-]+(?:\\.[A-Za-z0-9_+&*-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z]{2,}$"
    );

    public EmailAddress {
        if (value != null && !value.isBlank()) {
            if (value.length() > 254) {
                throw new IllegalArgumentException("Email address is too long (max 254 characters)");
            }

            if (!EMAIL_PATTERN.matcher(value).matches()) {
                throw new IllegalArgumentException("Invalid email format: " + value);
            }
        }
    }
}