diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs index b8ddd0c..42f5a78 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs @@ -1,29 +1,39 @@ -namespace Elektrifikatsiya.Services.Implementations; +using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; + +namespace Elektrifikatsiya.Services.Implementations; public class NotifcationService : INotificationService { - private readonly IEmailService emailService; - private readonly IEnergyPriceService energyPriceService; - private readonly Microsoft.Extensions.Configuration.IConfiguration configuration; - private readonly ILogger logger; - public TimeSpan ExecutionRepeatDelay => TimeSpan.FromDays(1); - public DateTime FirstExecutionTime => DateTime.Now.AddDays(0); + public TimeSpan ExecutionRepeatDelay => TimeSpan.FromDays(1); + public DateTime FirstExecutionTime => DateTime.Now.AddDays(0); + private readonly Microsoft.Extensions.Configuration.IConfiguration configuration; + private readonly IEmailService emailService; + private readonly IEnergyPriceService energyPriceService; + private readonly ILogger logger; + private readonly MainDatabaseContext mainDatabaseContext; - public NotifcationService(ILogger logger, IEmailService emailService, IEnergyPriceService energyPriceService, Microsoft.Extensions.Configuration.IConfiguration configuration) - { - this.logger = logger; - this.emailService = emailService; - this.energyPriceService = energyPriceService; - this.configuration = configuration; - } + public NotifcationService(ILogger logger, IEmailService emailService, IEnergyPriceService energyPriceService, Microsoft.Extensions.Configuration.IConfiguration configuration, IServiceScopeFactory serviceScopeFactory) + { + this.logger = logger; + this.emailService = emailService; + this.energyPriceService = energyPriceService; + this.configuration = configuration; - public async void Update() - { - logger.LogInformation("Sending Email"); + mainDatabaseContext = serviceScopeFactory.CreateScope().ServiceProvider.GetRequiredService(); + } - string url = configuration.GetValue("Url") ?? "https://http.cat/images/404.jpg"; + public async void Update() + { + logger.LogInformation("Sending Email"); - await emailService.SendWithTemeplateAsync("stone-red@stone-red.net", "Daily Notification", "DailyNotification", templateParameters: new() { { "yesterday", $"{energyPriceService.DailyEnergyCost:F2}" }, { "yearly", $"{energyPriceService.YearlyEnergyCost:F2}" }, { "link", url } }); - logger.LogInformation("Done sending"); - } + string url = configuration.GetValue("Url") ?? "https://http.cat/images/404.jpg"; + + await foreach (User user in mainDatabaseContext.Users) + { + await emailService.SendWithTemeplateAsync(user.Email, "Daily Notification", "DailyNotification", templateParameters: new() { { "yesterday", $"{energyPriceService.DailyEnergyCost:F2}" }, { "yearly", $"{energyPriceService.YearlyEnergyCost:F2}" }, { "link", url } }); + } + + logger.LogInformation("Done sending"); + } } \ No newline at end of file