From d4659ef9282ec7db84639fc2e61aac544e055045 Mon Sep 17 00:00:00 2001 From: Davide Sandrelli Date: Thu, 22 Jan 2026 11:46:09 +0100 Subject: [PATCH] - FIX Salvataggio mail Registrazione - Aggiunta RangeSize in scheduler --- StandManager.Domain/DTO/EmailConfig.cs | 1 + StandManager.MailProcessor/MailProcessor.cs | 5 +- StandManager.MailProcessor/appsettings.json | 3 +- StandManager.Service/MailQueueService.cs | 4 +- .../RegistrazioneMailProcessor.cs | 90 ++++++++++--------- .../Components/Pages/Registrazione.razor | 7 +- StandManager/appsettings.json | 3 +- 7 files changed, 63 insertions(+), 50 deletions(-) diff --git a/StandManager.Domain/DTO/EmailConfig.cs b/StandManager.Domain/DTO/EmailConfig.cs index 3d2a135..fcbbaad 100644 --- a/StandManager.Domain/DTO/EmailConfig.cs +++ b/StandManager.Domain/DTO/EmailConfig.cs @@ -5,4 +5,5 @@ public class EmailConfig public string From { get; set; } public string ServerAddress { get; set; } public string MailSplitChar { get; set; } + public int RangeSize { get; set; } } \ No newline at end of file diff --git a/StandManager.MailProcessor/MailProcessor.cs b/StandManager.MailProcessor/MailProcessor.cs index 1e0834d..5c8de87 100644 --- a/StandManager.MailProcessor/MailProcessor.cs +++ b/StandManager.MailProcessor/MailProcessor.cs @@ -1,3 +1,4 @@ +using Microsoft.Extensions.Options; using StandManager.Domain.DTO; using StandManager.Service.Interfaces; using StandManager.Service.Resolver; @@ -8,10 +9,10 @@ public class MailProcessor private readonly EmailConfig _config; private readonly IMailProcessorResolver _resolver; - public MailProcessor(IManagerService managerService, EmailConfig config, IMailProcessorResolver resolver) + public MailProcessor(IManagerService managerService, IOptions config, IMailProcessorResolver resolver) { _managerService = managerService; - _config = config; + _config = config.Value; _resolver = resolver; } diff --git a/StandManager.MailProcessor/appsettings.json b/StandManager.MailProcessor/appsettings.json index 2ecb831..000a4e5 100644 --- a/StandManager.MailProcessor/appsettings.json +++ b/StandManager.MailProcessor/appsettings.json @@ -12,6 +12,7 @@ "EmailConfig": { "From": "registrazioni@gruppodac.eu", "ServerAddress": "https://mailbridge.gruppodac.eu/api/graph/NewMessageHtml", - "MailSplitChar": "#" + "MailSplitChar": "#", + "RangeSize": 20 } } diff --git a/StandManager.Service/MailQueueService.cs b/StandManager.Service/MailQueueService.cs index f692b3f..fc4a6e7 100644 --- a/StandManager.Service/MailQueueService.cs +++ b/StandManager.Service/MailQueueService.cs @@ -16,7 +16,9 @@ public class MailQueueService : TService, IMailQueueService public async Task Salva(MailQueue entity) { - _unitOfWork.MailQueueRepository.Update(entity); + if (entity.Id == Guid.Empty) await _unitOfWork.MailQueueRepository.Put(entity); + else _unitOfWork.MailQueueRepository.Update(entity); + await _unitOfWork.Salva(); return entity; diff --git a/StandManager.Service/RegistrazioneMailProcessor.cs b/StandManager.Service/RegistrazioneMailProcessor.cs index e7684be..6390807 100644 --- a/StandManager.Service/RegistrazioneMailProcessor.cs +++ b/StandManager.Service/RegistrazioneMailProcessor.cs @@ -20,52 +20,58 @@ public class RegistrazioneMailProcessor : IMailProcessor public async Task ProcessAsync(List mailQueueList, EmailConfig _config, HttpClient httpClient) { - foreach (var mailQueue in mailQueueList) + var size = _config.RangeSize != 0 ? _config.RangeSize : mailQueueList.Count; + + foreach (var chunk in mailQueueList.Chunk(size)) { - var email = new Email() + foreach (var mailQueue in chunk) { - From = _config.From, - Body = string.IsNullOrEmpty(mailQueue.Args) ? mailQueue.Body : string.Format(mailQueue.Body, mailQueue.Args?.Split(_config.MailSplitChar) ?? [""]), - Cc = null, - Subject = mailQueue.Subject, - To = new(){"g.vitari@oaservice.it"} // mailQueue.ToList.Split(";").ToList() - }; - var messageJson = JsonSerializer.Serialize(email); - - // multipart - using var form = new MultipartFormDataContent(); - form.Add( - new StringContent(messageJson, Encoding.UTF8, "application/json"), - "messageJson" - ); - - //Attachments - /*var filePath = @"C:\temp\test.pdf"; - var fileBytes = await File.ReadAllBytesAsync(filePath); + var email = new Email() + { + From = _config.From, + Body = string.IsNullOrEmpty(mailQueue.Args) ? mailQueue.Body : string.Format(mailQueue.Body, mailQueue.Args?.Split(_config.MailSplitChar) ?? [""]), + Cc = null, + Subject = mailQueue.Subject, + To = new(){"g.vitari@oaservice.it"} // mailQueue.ToList.Split(";").ToList() + }; + var messageJson = JsonSerializer.Serialize(email); - var fileContent = new ByteArrayContent(fileBytes); - fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf"); - - form.Add( - fileContent, - "attachments", - Path.GetFileName(filePath) - );*/ - try - { - var response = await httpClient.PostAsync( - _config.ServerAddress, - form + // multipart + using var form = new MultipartFormDataContent(); + form.Add( + new StringContent(messageJson, Encoding.UTF8, "application/json"), + "messageJson" ); - response.EnsureSuccessStatusCode(); - mailQueue.Sent = true; - await _managerService.MailQueueService.Salva(mailQueue); - } - catch (Exception e) - { - mailQueue.Sent = false; - mailQueue.Error = e.Message; - await _managerService.MailQueueService.Salva(mailQueue); + + //Attachments + /*var filePath = @"C:\temp\test.pdf"; + var fileBytes = await File.ReadAllBytesAsync(filePath); + + var fileContent = new ByteArrayContent(fileBytes); + fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf"); + + form.Add( + fileContent, + "attachments", + Path.GetFileName(filePath) + );*/ + + try + { + var response = await httpClient.PostAsync( + _config.ServerAddress, + form + ); + response.EnsureSuccessStatusCode(); + mailQueue.Sent = true; + await _managerService.MailQueueService.Salva(mailQueue); + } + catch (Exception e) + { + mailQueue.Sent = false; + mailQueue.Error = e.Message; + await _managerService.MailQueueService.Salva(mailQueue); + } } } } diff --git a/StandManager/Components/Pages/Registrazione.razor b/StandManager/Components/Pages/Registrazione.razor index e709a8c..63dc0de 100644 --- a/StandManager/Components/Pages/Registrazione.razor +++ b/StandManager/Components/Pages/Registrazione.razor @@ -90,15 +90,16 @@ }; await _managerService.IscrizioneEventoPerMailService.Salva(model); - /*var queue = new MailQueue() + var queue = new MailQueue() { ToList = iscrizione.Mail, From = MailFrom.Registrazione, Body = string.Empty, Sent = false, - Subject = "Registrazione" + Subject = "Registrazione", + DataCreazione = DateTime.Now }; - await _managerService.MailQueueService.Salva(queue);*/ + await _managerService.MailQueueService.Salva(queue); _navManager.NavigateTo("/Grazie"); } diff --git a/StandManager/appsettings.json b/StandManager/appsettings.json index e5edbd4..a698ab0 100644 --- a/StandManager/appsettings.json +++ b/StandManager/appsettings.json @@ -12,6 +12,7 @@ "EmailConfig": { "From": "", "ServerAddress": "", - "MailSplitChar": "#" + "MailSplitChar": "#", + "RangeSize": 0 } }