using BinaryDad.AacpsBusAlert; using BinaryDad.Extensions; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Newtonsoft.Json; var host = Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, builder) => { builder.AddEnvironmentVariables(); var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");// context.HostingEnvironment.EnvironmentName; builder.AddJsonFile("appsettings.json"); builder.AddJsonFile($"appsettings.{env}.json", true); }) .ConfigureServices((context, services) => { services.AddHttpClient(); services.Configure>(context.Configuration.GetSection("Users")); }) .Build(); var configuration = host.Services.GetService(); var httpClientFactory = host.Services.GetService(); var httpClient = httpClientFactory.CreateClient(); var apiBaseUrl = configuration["Urls:Api"]; var apiBusRouteUrl = UrlUtility.Combine(apiBaseUrl, "api/routes"); var busRoutesRaw = await httpClient.GetStringAsync(apiBusRouteUrl); var userRoutes = host.Services.GetService>>(); var busRoutes = JsonConvert.DeserializeObject>(busRoutesRaw); foreach (var userRoute in userRoutes.Value) { var matchedRoutes = busRoutes .Join(userRoute.Routes, b => b.BusNumber, u => u.BusNumber, (b, u) => new { UserRoute = u, BusRoute = b }) .ToList(); // send alert for these buses Console.WriteLine($"User {userRoute.Email} has {matchedRoutes.Count} delays:"); foreach (var matchedRoute in matchedRoutes) { Console.WriteLine($" {matchedRoute.BusRoute.BusNumber} ({matchedRoute.UserRoute.Label}): {matchedRoute.BusRoute.Impact} for {matchedRoute.BusRoute.Schedules} at {matchedRoute.BusRoute.Schools}"); } } Console.ReadLine();