Files
monorepo/LCU.API.Internal.MemberPreferencesApi/LCU.Library.Internal.MemberPreferencesApiModels/Requests/MemberOptinRequest.cs
T
2026-04-07 13:11:39 -05:00

60 lines
2.1 KiB
C#

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<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
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);
}
}
}