diff --git a/BinaryDad.AacpsBusAlert.Services/BinaryDad.AacpsBusAlert.Services.csproj b/BinaryDad.AacpsBusAlert.Services/BinaryDad.AacpsBusAlert.Services.csproj index 2703565..992d1fc 100644 --- a/BinaryDad.AacpsBusAlert.Services/BinaryDad.AacpsBusAlert.Services.csproj +++ b/BinaryDad.AacpsBusAlert.Services/BinaryDad.AacpsBusAlert.Services.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -6,6 +6,16 @@ enable + + + + + + + PreserveNewest + + + diff --git a/BinaryDad.AacpsBusAlert.Services/BusRouteService.cs b/BinaryDad.AacpsBusAlert.Services/BusRouteService/HtmlScrapeBusRouteService.cs similarity index 90% rename from BinaryDad.AacpsBusAlert.Services/BusRouteService.cs rename to BinaryDad.AacpsBusAlert.Services/BusRouteService/HtmlScrapeBusRouteService.cs index b69eb34..3e1c7ef 100644 --- a/BinaryDad.AacpsBusAlert.Services/BusRouteService.cs +++ b/BinaryDad.AacpsBusAlert.Services/BusRouteService/HtmlScrapeBusRouteService.cs @@ -4,11 +4,11 @@ using System.Text.RegularExpressions; namespace BinaryDad.AacpsBusAlert.Services { - public class BusRouteService + public class HtmlScrapeBusRouteService : IBusRouteService { private readonly HttpClient httpClient; - public BusRouteService(IHttpClientFactory httpClientFactory) + public HtmlScrapeBusRouteService(IHttpClientFactory httpClientFactory) { httpClient = httpClientFactory.CreateClient(); } diff --git a/BinaryDad.AacpsBusAlert.Services/BusRouteService/IBusRouteService.cs b/BinaryDad.AacpsBusAlert.Services/BusRouteService/IBusRouteService.cs new file mode 100644 index 0000000..d7d093f --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Services/BusRouteService/IBusRouteService.cs @@ -0,0 +1,7 @@ +namespace BinaryDad.AacpsBusAlert.Services +{ + public interface IBusRouteService + { + Task> GetBusRoutesAsync(); + } +} \ No newline at end of file diff --git a/BinaryDad.AacpsBusAlert.Services/UserService/IUserService.cs b/BinaryDad.AacpsBusAlert.Services/UserService/IUserService.cs new file mode 100644 index 0000000..e39c7ec --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Services/UserService/IUserService.cs @@ -0,0 +1,8 @@ +namespace BinaryDad.AacpsBusAlert.Services +{ + public interface IUserService + { + ICollection GetUsers(); + User GetUser(Guid id); + } +} diff --git a/BinaryDad.AacpsBusAlert.Services/UserService/JsonUserService.cs b/BinaryDad.AacpsBusAlert.Services/UserService/JsonUserService.cs new file mode 100644 index 0000000..881ef32 --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Services/UserService/JsonUserService.cs @@ -0,0 +1,21 @@ +using Newtonsoft.Json; + +namespace BinaryDad.AacpsBusAlert.Services +{ + public class JsonUserService : IUserService + { + public ICollection GetUsers() + { + var path = Path.Combine(AppContext.BaseDirectory, "users.json"); + + var usersJson = File.ReadAllText(path); + + return JsonConvert.DeserializeObject>(usersJson); + } + + public User GetUser(Guid id) + { + return GetUsers().First(u => u.Id == id); + } + } +} diff --git a/BinaryDad.AacpsBusAlert.Services/users.json b/BinaryDad.AacpsBusAlert.Services/users.json new file mode 100644 index 0000000..eb3c42c --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Services/users.json @@ -0,0 +1,23 @@ +[ + { + "Id": "b43f4f45-0f7b-4976-849d-8ad4b271199c", + "Email": "ryan@binarydad.com", + "Routes": [ + { + "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", + "BusNumber": 203, + "Label": "Con's Bus" + }, + { + "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", + "BusNumber": 457, + "Label": "Con's Activity Bus" + }, + { + "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", + "BusNumber": 365, + "Label": "Cam's Bus" + } + ] + } +] \ No newline at end of file diff --git a/BinaryDad.AacpsBusAlert.Web/.config/dotnet-tools.json b/BinaryDad.AacpsBusAlert.Web/.config/dotnet-tools.json new file mode 100644 index 0000000..b8c6c1f --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Web/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "6.0.9", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/BinaryDad.AacpsBusAlert.Web/BinaryDad.AacpsBusAlert.Web.csproj b/BinaryDad.AacpsBusAlert.Web/BinaryDad.AacpsBusAlert.Web.csproj index d350116..9936691 100644 --- a/BinaryDad.AacpsBusAlert.Web/BinaryDad.AacpsBusAlert.Web.csproj +++ b/BinaryDad.AacpsBusAlert.Web/BinaryDad.AacpsBusAlert.Web.csproj @@ -6,6 +6,10 @@ enable + + <_WebToolingArtifacts Remove="Properties\PublishProfiles\Release.pubxml" /> + + diff --git a/BinaryDad.AacpsBusAlert.Web/Controllers/ApiController.cs b/BinaryDad.AacpsBusAlert.Web/Controllers/ApiController.cs index c990536..a0f12c0 100644 --- a/BinaryDad.AacpsBusAlert.Web/Controllers/ApiController.cs +++ b/BinaryDad.AacpsBusAlert.Web/Controllers/ApiController.cs @@ -6,9 +6,9 @@ namespace BinaryDad.AacpsBusAlert.Web.Controllers [Route("api")] public class ApiController : Controller { - private readonly BusRouteService busRouteService; + private readonly IBusRouteService busRouteService; - public ApiController(BusRouteService busRouteService) + public ApiController(IBusRouteService busRouteService) { this.busRouteService = busRouteService; } diff --git a/BinaryDad.AacpsBusAlert.Web/Controllers/HomeController.cs b/BinaryDad.AacpsBusAlert.Web/Controllers/HomeController.cs index fa63a24..c79c58f 100644 --- a/BinaryDad.AacpsBusAlert.Web/Controllers/HomeController.cs +++ b/BinaryDad.AacpsBusAlert.Web/Controllers/HomeController.cs @@ -9,24 +9,33 @@ namespace BinaryDad.AacpsBusAlert.Web.Controllers public class HomeController : Controller { private readonly ILogger logger; - private readonly BusRouteService busRouteService; + private readonly IBusRouteService busRouteService; + private readonly IUserService userService; - public HomeController(ILogger logger, BusRouteService busRouteService) + public HomeController(ILogger logger, IBusRouteService busRouteService, IUserService userService) { this.logger = logger; this.busRouteService = busRouteService; + this.userService = userService; } public async Task Index() { - var userRoutes = new[] { 203, 365, 277, 269, 274 }; + var user = userService.GetUser(Guid.Parse("b43f4f45-0f7b-4976-849d-8ad4b271199c")); //var busRoutes = await CacheHelper.GetAsync("BusRoutes", () => busRouteService.GetBusRoutesAsync()); var busRoutes = await busRouteService.GetBusRoutesAsync(); + var userRouteIds = user.Routes.Select(r => r.BusNumber).ToList(); - var matchedBusRoutes = busRoutes.Join(userRoutes, r => r.BusNumber, u => u, (r, u) => r).ToList(); + var matchedBusRoutes = busRoutes.Join(userRouteIds, r => r.BusNumber, u => u, (r, u) => r).ToList(); - return View(matchedBusRoutes); + var summary = new SummaryViewModel + { + User = user, + Routes = matchedBusRoutes + }; + + return View(summary); } public IActionResult Privacy() diff --git a/BinaryDad.AacpsBusAlert.Web/Models/SummaryViewModel.cs b/BinaryDad.AacpsBusAlert.Web/Models/SummaryViewModel.cs new file mode 100644 index 0000000..0ed797c --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Web/Models/SummaryViewModel.cs @@ -0,0 +1,8 @@ +namespace BinaryDad.AacpsBusAlert.Web.Models +{ + public class SummaryViewModel + { + public User User { get; set; } + public ICollection Routes { get; set; } + } +} diff --git a/BinaryDad.AacpsBusAlert.Web/Program.cs b/BinaryDad.AacpsBusAlert.Web/Program.cs index ab3e354..51c34d0 100644 --- a/BinaryDad.AacpsBusAlert.Web/Program.cs +++ b/BinaryDad.AacpsBusAlert.Web/Program.cs @@ -1,10 +1,12 @@ + using BinaryDad.AacpsBusAlert.Services; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); -builder.Services.AddTransient(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddHttpClient(); var app = builder.Build(); @@ -12,8 +14,10 @@ var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { + app.UseHttpsRedirection(); app.UseExceptionHandler("/Home/Error"); } + app.UseStaticFiles(); app.UseRouting(); diff --git a/BinaryDad.AacpsBusAlert.Web/Properties/PublishProfiles/Release.pubxml b/BinaryDad.AacpsBusAlert.Web/Properties/PublishProfiles/Release.pubxml new file mode 100644 index 0000000..64f1dd2 --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Web/Properties/PublishProfiles/Release.pubxml @@ -0,0 +1,22 @@ + + + + + false + false + true + Release + Any CPU + FileSystem + \\server\Local\Web\AacpsBusAlert + FileSystem + <_TargetId>Folder + + net6.0 + win-x64 + 67dec24b-132b-47cf-8afb-75e942076bc0 + false + + \ No newline at end of file diff --git a/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml b/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml index 64237be..54f9aff 100644 --- a/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml +++ b/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml @@ -1,16 +1,43 @@ -@model ICollection +@model SummaryViewModel @{ - ViewData["Title"] = "Home Page"; - var busRoutes = Model.OrderBy(r => r.BusNumber); + var busRoutes = Model.Routes.OrderBy(r => r.BusNumber).ToList(); + var hasDelays = busRoutes.Any(); + + var userBusRoutes = Model.User.Routes + .OrderBy(r => r.BusNumber) + .ToList(); } -@foreach (var busRoute in busRoutes) +@if (hasDelays) { -
-

@busRoute.BusNumber - @busRoute.Schools

-

@busRoute.Impact

-

@busRoute.Schedules

+
+

Uh oh

+ We have @busRoutes.Count delays
-} \ No newline at end of file +} +else +{ +
+

Good news!

+ No delays today! +
+} + +

My Buses

+ +@foreach (var busRoute in userBusRoutes) +{ +
@busRoute.BusNumber - @busRoute.Label
+} + +
    + @foreach (var busRoute in busRoutes) + { +
  • + @busRoute.BusNumber - @busRoute.Schools +

    @busRoute.Impact @busRoute.Schedules

    +
  • + } +
diff --git a/BinaryDad.AacpsBusAlert.Web/Views/Home/Privacy.cshtml b/BinaryDad.AacpsBusAlert.Web/Views/Home/Privacy.cshtml deleted file mode 100644 index af4fb19..0000000 --- a/BinaryDad.AacpsBusAlert.Web/Views/Home/Privacy.cshtml +++ /dev/null @@ -1,6 +0,0 @@ -@{ - ViewData["Title"] = "Privacy Policy"; -} -

@ViewData["Title"]

- -

Use this page to detail your site's privacy policy.

diff --git a/BinaryDad.AacpsBusAlert.Web/Views/Shared/_Layout.cshtml b/BinaryDad.AacpsBusAlert.Web/Views/Shared/_Layout.cshtml index 54dc9cb..2f5b97b 100644 --- a/BinaryDad.AacpsBusAlert.Web/Views/Shared/_Layout.cshtml +++ b/BinaryDad.AacpsBusAlert.Web/Views/Shared/_Layout.cshtml @@ -12,7 +12,7 @@