using FluentValidation; using Raven.Client.Documents; namespace zero.Mails; public class MailTemplatesStore : EntityStore, IMailTemplatesStore { protected IMailDispatcher Dispatcher { get; set; } public MailTemplatesStore(IStoreContext context, IMailDispatcher dispatcher = null) : base(context) { Dispatcher = dispatcher; } /// public async Task GetByKey(string key) { return await Session.Query().FirstOrDefaultAsync(x => x.Key == key); } /// protected override void ValidationRules(ZeroValidator validator) { validator.RuleFor(x => x.SenderEmail).Email(); if (Dispatcher != null) { validator.RuleFor(x => x.SenderEmail).MustAsync(async (value, ct) => { return await Dispatcher.IsSenderSupported(value); }).WithMessage("@mailTemplate.errors.senderNotAllowed"); } } } public interface IMailTemplatesStore : IEntityStore { /// /// Get mail template by associated key /// Task GetByKey(string key); }