From 53fc0e26a6a5b839103b1d34cf23cfd0b3252cc1 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Thu, 25 Jul 2019 14:53:49 +0200 Subject: [PATCH] always send an email, at notifying some performer --- src/Yavsc/Services/YavscMessageSender.cs | 115 ++++++++++++----------- 1 file changed, 62 insertions(+), 53 deletions(-) diff --git a/src/Yavsc/Services/YavscMessageSender.cs b/src/Yavsc/Services/YavscMessageSender.cs index af0154dd..52061378 100644 --- a/src/Yavsc/Services/YavscMessageSender.cs +++ b/src/Yavsc/Services/YavscMessageSender.cs @@ -25,14 +25,14 @@ namespace Yavsc.Services IConnexionManager _cxManager; public YavscMessageSender( - ILoggerFactory loggerFactory, - IOptions sitesOptions, + ILoggerFactory loggerFactory, + IOptions sitesOptions, IOptions smtpOptions, IEmailSender emailSender, ApplicationDbContext dbContext, IConnexionManager cxManager ) - { + { _logger = loggerFactory.CreateLogger(); _emailSender = emailSender; siteSettings = sitesOptions?.Value; @@ -41,7 +41,7 @@ namespace Yavsc.Services _cxManager = cxManager; } - public async Task NotifyEvent + public async Task NotifyEvent (IEnumerable userIds, Event ev) where Event : IEvent { @@ -52,79 +52,87 @@ namespace Yavsc.Services if (ev.Sender == null) throw new Exception("Spécifier un expéditeur"); - if (userIds == null ) + if (userIds == null) throw new Exception("Notify e No user id"); MessageWithPayloadResponse response = new MessageWithPayloadResponse(); var raa = userIds.ToArray(); - if (raa.Length<1) - throw new Exception("No dest id"); - - try { + if (raa.Length < 1) + throw new Exception("No dest id"); + + try + { List results = new List(); - foreach(var userId in raa) { + foreach (var userId in raa) + { MessageWithPayloadResponse.Result result = new MessageWithPayloadResponse.Result(); result.registration_id = userId; - var user = _dbContext.Users.FirstOrDefault(u=> u.Id == userId); - if (user==null) + var user = _dbContext.Users.FirstOrDefault(u => u.Id == userId); + if (user == null) { response.failure++; result.error = "no such user."; continue; } - if (!user.EmailConfirmed){ + if (!user.EmailConfirmed) + { response.failure++; result.error = "user has not confirmed his email address."; continue; } - if (user.Email==null){ + if (user.Email == null) + { response.failure++; result.error = "user has no legacy email address."; continue; } var body = ev.CreateBody(); - - var cxids = _cxManager.GetConnexionIds(user.UserName).ToArray(); - - if (cxids.Length==0) + + + _logger.LogDebug($"Sending to {user.UserName} <{user.Email}> : {body}"); + var mailSent = await _emailSender.SendEmailAsync( + user.UserName, + user.Email, + $"{ev.Sender} (un client) vous demande un rendez-vous", + body + Environment.NewLine + ); + + if (!mailSent.Sent) { - _logger.LogDebug($"Sending to {user.UserName} <{user.Email}> : {body}"); - var mailSent = await _emailSender.SendEmailAsync( - user.UserName, - user.Email, - $"{ev.Sender} (un client) vous demande un rendez-vous", - body+Environment.NewLine - ); + result.message_id = mailSent.MessageId; + result.error = mailSent.ErrorMessage; + response.failure++; + } + else + { + result.message_id = mailSent.MessageId; + response.success++; + } + var cxids = _cxManager.GetConnexionIds(user.UserName).ToArray(); + if (cxids.Length == 0) + { + _logger.LogDebug($"no cx to {user.UserName} <{user.Email}> "); + } + else + { + _logger.LogDebug($"Sending signal to {string.Join(" ", cxids)} : " + JsonConvert.SerializeObject(ev)); - if (!mailSent.Sent) { - result.message_id = mailSent.MessageId; - result.error = mailSent.ErrorMessage; - response.failure++; - } - else + foreach (var cxid in cxids) { - result.message_id = mailSent.MessageId; - response.success++; + var hubClient = hubContext.Clients.User(cxid); + var data = new Dictionary(); + data["event"] = ev; + + hubClient.push(ev.Topic, data); } - } - else { - _logger.LogDebug($"Sending signal to {string.Join(" ",cxids)} : "+JsonConvert.SerializeObject(ev)); - - foreach( var cxid in cxids) { - var hubClient = hubContext.Clients.User(cxid); - var data = new Dictionary(); - data["event"] = ev; - - hubClient.push(ev.Topic, data ); - } - - result.message_id=MimeKit.Utils.MimeUtils.GenerateMessageId( + + result.message_id = MimeKit.Utils.MimeUtils.GenerateMessageId( siteSettings.Authority ); - + response.success++; } results.Add(result); @@ -132,13 +140,14 @@ namespace Yavsc.Services response.results = results.ToArray(); return response; } - catch (Exception ex) { - _logger.LogError("Quelque chose s'est mal passé à l'envoi: "+ex.Message); - throw; + catch (Exception ex) + { + _logger.LogError("Quelque chose s'est mal passé à l'envoi: " + ex.Message); + throw; } } - - public async Task NotifyBookQueryAsync( IEnumerable userIds, RdvQueryEvent ev) + + public async Task NotifyBookQueryAsync(IEnumerable userIds, RdvQueryEvent ev) { return await NotifyEvent(userIds, ev); } @@ -158,7 +167,7 @@ namespace Yavsc.Services { return await NotifyEvent(userIds, yaev); } - + /* SMS with Twilio: public Task SendSmsAsync(TwilioSettings twilioSettigns, string number, string message) {