From 23d960b101f4fb4ea84c71b828d29af05bcba0a8 Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Mon, 19 Sep 2022 11:30:16 -0400 Subject: [PATCH 1/8] add pub profile, additional test data --- .../.config/dotnet-tools.json | 12 ++++++++++ .../BinaryDad.AacpsBusAlert.Web.csproj | 4 ++++ .../Properties/PublishProfiles/Release.pubxml | 22 +++++++++++++++++++ .../appsettings.Development.json | 3 ++- .../appsettings.json | 16 ++++++++++++++ 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 BinaryDad.AacpsBusAlert.Web/.config/dotnet-tools.json create mode 100644 BinaryDad.AacpsBusAlert.Web/Properties/PublishProfiles/Release.pubxml 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/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.Worker/appsettings.Development.json b/BinaryDad.AacpsBusAlert.Worker/appsettings.Development.json index c8bc59e..42745d4 100644 --- a/BinaryDad.AacpsBusAlert.Worker/appsettings.Development.json +++ b/BinaryDad.AacpsBusAlert.Worker/appsettings.Development.json @@ -1,5 +1,6 @@ { "Urls": { - "Api": "http://localhost:5299/" + //"Api": "http://localhost:5299/", + "Api": "https://buses.binarydad.com/" } } \ No newline at end of file diff --git a/BinaryDad.AacpsBusAlert.Worker/appsettings.json b/BinaryDad.AacpsBusAlert.Worker/appsettings.json index c9de06a..7f9a879 100644 --- a/BinaryDad.AacpsBusAlert.Worker/appsettings.json +++ b/BinaryDad.AacpsBusAlert.Worker/appsettings.json @@ -20,6 +20,22 @@ "Label": "Yet another test bus" } ] + }, + { + "Id": "b43f4f45-0f7b-4976-849d-8ad4b271199c", + "Email": "krystle@allwillynilly.com", + "Routes": [ + { + "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", + "BusNumber": 203, + "Label": "Vivi's Bus'" + }, + { + "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", + "BusNumber": 117, + "Label": "Ray's" + } + ] } ] } \ No newline at end of file From d1da30380577926a4d654185bbb7ddb2f56fc812 Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Mon, 3 Oct 2022 21:44:58 -0400 Subject: [PATCH 2/8] add school name to output --- BinaryDad.AacpsBusAlert.Worker/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BinaryDad.AacpsBusAlert.Worker/Program.cs b/BinaryDad.AacpsBusAlert.Worker/Program.cs index b40488a..6bfa10a 100644 --- a/BinaryDad.AacpsBusAlert.Worker/Program.cs +++ b/BinaryDad.AacpsBusAlert.Worker/Program.cs @@ -53,7 +53,7 @@ foreach (var userRoute in userRoutes.Value) foreach (var matchedRoute in matchedRoutes) { - Console.WriteLine($" {matchedRoute.BusRoute.BusNumber} ({matchedRoute.UserRoute.Label}): {matchedRoute.BusRoute.Impact} for {matchedRoute.BusRoute.Schedules}"); + Console.WriteLine($" {matchedRoute.BusRoute.BusNumber} ({matchedRoute.UserRoute.Label}): {matchedRoute.BusRoute.Impact} for {matchedRoute.BusRoute.Schedules} at {matchedRoute.BusRoute.Schools}"); } } From 43aa0aaa6e8ba3504731478a0cf5a9d6f853fe3b Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Tue, 4 Oct 2022 22:23:14 -0400 Subject: [PATCH 3/8] ui updates, use services --- .../BinaryDad.AacpsBusAlert.Services.csproj | 12 +++++- .../HtmlScrapeBusRouteService.cs} | 4 +- .../BusRouteService/IBusRouteService.cs | 7 ++++ .../UserService/IUserService.cs | 8 ++++ .../UserService/JsonUserService.cs | 21 ++++++++++ BinaryDad.AacpsBusAlert.Services/users.json | 18 +++++++++ .../Controllers/ApiController.cs | 4 +- .../Controllers/HomeController.cs | 19 ++++++--- .../Models/SummaryViewModel.cs | 8 ++++ BinaryDad.AacpsBusAlert.Web/Program.cs | 4 +- .../Views/Home/Index.cshtml | 40 ++++++++++++++----- .../Views/Home/Privacy.cshtml | 6 --- .../wwwroot/css/site.css | 22 ++++++---- 13 files changed, 139 insertions(+), 34 deletions(-) rename BinaryDad.AacpsBusAlert.Services/{BusRouteService.cs => BusRouteService/HtmlScrapeBusRouteService.cs} (90%) create mode 100644 BinaryDad.AacpsBusAlert.Services/BusRouteService/IBusRouteService.cs create mode 100644 BinaryDad.AacpsBusAlert.Services/UserService/IUserService.cs create mode 100644 BinaryDad.AacpsBusAlert.Services/UserService/JsonUserService.cs create mode 100644 BinaryDad.AacpsBusAlert.Services/users.json create mode 100644 BinaryDad.AacpsBusAlert.Web/Models/SummaryViewModel.cs delete mode 100644 BinaryDad.AacpsBusAlert.Web/Views/Home/Privacy.cshtml 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..7c96273 --- /dev/null +++ b/BinaryDad.AacpsBusAlert.Services/users.json @@ -0,0 +1,18 @@ +[ + { + "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": 365, + "Label": "Cam's bus'" + } + ] + } +] \ No newline at end of file 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..66db338 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(); diff --git a/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml b/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml index 64237be..d535325 100644 --- a/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml +++ b/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml @@ -1,16 +1,38 @@ -@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 userBusRouteList = string.Join(", ", Model.User.Routes + .Select(r => r.BusNumber) + .OrderBy(r => r)); } -@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: @userBusRouteList + +
    + @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/wwwroot/css/site.css b/BinaryDad.AacpsBusAlert.Web/wwwroot/css/site.css index f27e5ad..edece24 100644 --- a/BinaryDad.AacpsBusAlert.Web/wwwroot/css/site.css +++ b/BinaryDad.AacpsBusAlert.Web/wwwroot/css/site.css @@ -1,18 +1,24 @@ html { - font-size: 14px; + font-size: 14px; } @media (min-width: 768px) { - html { - font-size: 16px; - } + html { + font-size: 16px; + } } html { - position: relative; - min-height: 100%; + position: relative; + min-height: 100%; } body { - margin-bottom: 60px; -} \ No newline at end of file + margin-bottom: 60px; +} + +#route-list { + margin: 20px 0 0; + padding: 0; + list-style-type: none; +} From c7d2f368686a5895fdb790d5d8b59cf42f580aff Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Tue, 4 Oct 2022 22:28:21 -0400 Subject: [PATCH 4/8] https redirection --- BinaryDad.AacpsBusAlert.Web/Program.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BinaryDad.AacpsBusAlert.Web/Program.cs b/BinaryDad.AacpsBusAlert.Web/Program.cs index 66db338..51c34d0 100644 --- a/BinaryDad.AacpsBusAlert.Web/Program.cs +++ b/BinaryDad.AacpsBusAlert.Web/Program.cs @@ -14,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(); From c34c3be9d04b03d9e036893b2f3d4772930ae0d3 Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Thu, 13 Oct 2022 18:50:27 +0000 Subject: [PATCH 5/8] updated bus list to include activity bus --- BinaryDad.AacpsBusAlert.Services/users.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/BinaryDad.AacpsBusAlert.Services/users.json b/BinaryDad.AacpsBusAlert.Services/users.json index 7c96273..a254bda 100644 --- a/BinaryDad.AacpsBusAlert.Services/users.json +++ b/BinaryDad.AacpsBusAlert.Services/users.json @@ -6,12 +6,17 @@ { "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", "BusNumber": 203, - "Label": "Con's bus'" + "Label": "Con's Bus'" + }, + { + "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", + "BusNumber": 203, + "Label": "Con's Activity Bus'" }, { "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", "BusNumber": 365, - "Label": "Cam's bus'" + "Label": "Cam's Bus'" } ] } From 38238d29a16cd68de85fb912caa2106a3d6c1bd2 Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Thu, 13 Oct 2022 21:36:01 -0400 Subject: [PATCH 6/8] fix users.json --- BinaryDad.AacpsBusAlert.Services/users.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/BinaryDad.AacpsBusAlert.Services/users.json b/BinaryDad.AacpsBusAlert.Services/users.json index a254bda..eb3c42c 100644 --- a/BinaryDad.AacpsBusAlert.Services/users.json +++ b/BinaryDad.AacpsBusAlert.Services/users.json @@ -6,17 +6,17 @@ { "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", "BusNumber": 203, - "Label": "Con's Bus'" + "Label": "Con's Bus" }, { "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", - "BusNumber": 203, - "Label": "Con's Activity Bus'" + "BusNumber": 457, + "Label": "Con's Activity Bus" }, { "Id": "bfed1017-be53-42f9-bb46-ddbf27d4270f", "BusNumber": 365, - "Label": "Cam's Bus'" + "Label": "Cam's Bus" } ] } From f99c2189e4aec3472d16a0430037e3d248a4ba24 Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Thu, 13 Oct 2022 21:36:33 -0400 Subject: [PATCH 7/8] show buses in a list --- BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml b/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml index d535325..54f9aff 100644 --- a/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml +++ b/BinaryDad.AacpsBusAlert.Web/Views/Home/Index.cshtml @@ -5,9 +5,9 @@ var busRoutes = Model.Routes.OrderBy(r => r.BusNumber).ToList(); var hasDelays = busRoutes.Any(); - var userBusRouteList = string.Join(", ", Model.User.Routes - .Select(r => r.BusNumber) - .OrderBy(r => r)); + var userBusRoutes = Model.User.Routes + .OrderBy(r => r.BusNumber) + .ToList(); } @if (hasDelays) @@ -25,7 +25,12 @@ else
} -My Buses: @userBusRouteList +

My Buses

+ +@foreach (var busRoute in userBusRoutes) +{ +
@busRoute.BusNumber - @busRoute.Label
+}
    @foreach (var busRoute in busRoutes) From c07e110ca641d2714d5a454ef0ebc5d4455d892e Mon Sep 17 00:00:00 2001 From: Ryan Peters Date: Thu, 13 Oct 2022 21:36:42 -0400 Subject: [PATCH 8/8] fix names --- BinaryDad.AacpsBusAlert.Web/Views/Shared/_Layout.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 @@