public async Task SendEmailBookToInterestedUsers(Book book) { int MAX_DESTINATIONS = int.Parse(_configuration["AWSSQSSettings:MaxDestinationsPerMessage"]); var vm = new { Book = book, ServerSettings = _serverSettings, name = "{name}"// recebe {name} pois e o padrao que o servico Consumer reconhece para substituicao para o nome do usuario para o qual ira enviar o email }; var html = await _emailTemplate.GenerateHtmlFromTemplateAsync(NewBookNotifyTemplate, vm); var message = new AWSSQSMessageNewBookNotifyRequest { Subject = $"Chegou um livro de {book.Category.Name}", BodyHTML = html }; var interestedUsers = _userService.GetBySolicitedBookCategory(book.CategoryId); int maxMessages = interestedUsers.Count() % MAX_DESTINATIONS == 0 ? interestedUsers.Count() / MAX_DESTINATIONS : interestedUsers.Count() / MAX_DESTINATIONS + 1; for (int i = 1; i <= maxMessages; i++) { var destinations = interestedUsers.Skip((i - 1) * MAX_DESTINATIONS).Take(MAX_DESTINATIONS).Select(u => new DestinationRequest { Name = u.Name, Email = u.Email }); message.Destinations = destinations.ToList(); await _AWSSQSService.SendNewBookNotifyToAWSSQSAsync(message); } }
public async Task SendNewBookNotifyToAWSSQSAsync(AWSSQSMessageNewBookNotifyRequest message) { if (_AWSSQSSettings.IsActive) { var request = new SendMessageRequest { DelaySeconds = (int)TimeSpan.FromSeconds(5).TotalSeconds, MessageBody = System.Text.Json.JsonSerializer.Serialize(message), QueueUrl = _AWSSQSSettings.QueueUrl }; await _amazonSQSClient.SendMessageAsync(request); } }