using System.ComponentModel.DataAnnotations; using DigitalData.EmailProfiler.Domain.Common; using DigitalData.EmailProfiler.Domain.Exceptions; namespace DigitalData.EmailProfiler.Domain.ValueObjects; /// /// Value object representing an email address with validation /// public class EmailAddress : ValueObject { public string Value { get; private set; } public string Domain { get; private set; } public string LocalPart { get; private set; } private EmailAddress(string value) { Value = value; var parts = value.Split('@'); LocalPart = parts[0]; Domain = parts[1]; } public static EmailAddress Create(string email) { if (!IsValid(email)) throw new DomainException($"Invalid email address: {email}"); return new EmailAddress(email.ToLowerInvariant()); } private static bool IsValid(string email) { return !string.IsNullOrWhiteSpace(email) && email.Contains('@') && new EmailAddressAttribute().IsValid(email); } protected override IEnumerable GetEqualityComponents() { yield return Value; } public override string ToString() => Value; }