using LCU.Library.Internal.MemberPreferencesApiModels.Entities; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace LCU.Library.Internal.MemberPreferencesApiModels.Requests; public class MemberOptinRequest : IValidatableObject { [Required] public string UserId { get; set; } public string Email { get; set; } [Required] public string Value { get; set; } [Required] public string LegalReference { get; set; } public IEnumerable Validate(ValidationContext validationContext) { var results = new List(); if (!string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase) && !string.Equals(Value, DeliveryPreference.Paper, StringComparison.InvariantCultureIgnoreCase)) { results.Add(new ValidationResult( $"Invalid Option for Unified Opt-In Preference", new[] { "Value" })); } if (string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrWhiteSpace(Email)) { results.Add(new ValidationResult("Email is required when Opting in", new[] { "Email" })); } else { try { var unused = new System.Net.Mail.MailAddress(Email); } catch { results.Add(new ValidationResult("Invalid Email Format", new[] { "Email" })); } } } return results; } public bool IsElectronicRequest() { return string.Equals(Value, DeliveryPreference.Electronic, StringComparison.InvariantCultureIgnoreCase); } public bool IsPaperRequest() { return string.Equals(Value, DeliveryPreference.Paper, StringComparison.InvariantCultureIgnoreCase); } }