From 1dc1b0fe32c4b5f0c06e9719d5e3dd1f102bfca8 Mon Sep 17 00:00:00 2001 From: Damian Edwards Date: Mon, 5 Feb 2024 17:09:39 +1100 Subject: [PATCH] Add lab 4 src starting point (#6) --- .../src/Keycloak/data/import/eshop-realm.json | 37 - .../WebApp/Components/Layout/UserMenu.razor | 1 - .../src/Catalog.API/Apis/CatalogApi.cs | 214 ++ .../src/Catalog.API/Catalog.API.csproj | 15 + .../src/Catalog.API/Catalog.API.http | 10 + .../src/Catalog.API/CatalogOptions.cs | 18 + .../Extensions/HostingExtensions.cs | 21 + .../src/Catalog.API/Model/CatalogServices.cs | 13 + .../src/Catalog.API/Model/PaginatedItems.cs | 12 + .../Catalog.API/Model/PaginationRequest.cs | 8 + .../src/Catalog.API/Pics/1.webp | Bin 0 -> 47496 bytes .../src/Catalog.API/Pics/10.webp | Bin 0 -> 26522 bytes .../src/Catalog.API/Pics/100.webp | Bin 0 -> 20760 bytes .../src/Catalog.API/Pics/101.webp | Bin 0 -> 55570 bytes .../src/Catalog.API/Pics/11.webp | Bin 0 -> 17650 bytes .../src/Catalog.API/Pics/12.webp | Bin 0 -> 17686 bytes .../src/Catalog.API/Pics/13.webp | Bin 0 -> 19136 bytes .../src/Catalog.API/Pics/14.webp | Bin 0 -> 34824 bytes .../src/Catalog.API/Pics/15.webp | Bin 0 -> 40686 bytes .../src/Catalog.API/Pics/16.webp | Bin 0 -> 16052 bytes .../src/Catalog.API/Pics/17.webp | Bin 0 -> 37630 bytes .../src/Catalog.API/Pics/18.webp | Bin 0 -> 24328 bytes .../src/Catalog.API/Pics/19.webp | Bin 0 -> 50934 bytes .../src/Catalog.API/Pics/2.webp | Bin 0 -> 44264 bytes .../src/Catalog.API/Pics/20.webp | Bin 0 -> 42960 bytes .../src/Catalog.API/Pics/21.webp | Bin 0 -> 36876 bytes .../src/Catalog.API/Pics/22.webp | Bin 0 -> 14608 bytes .../src/Catalog.API/Pics/23.webp | Bin 0 -> 31816 bytes .../src/Catalog.API/Pics/24.webp | Bin 0 -> 19452 bytes .../src/Catalog.API/Pics/25.webp | Bin 0 -> 15370 bytes .../src/Catalog.API/Pics/26.webp | Bin 0 -> 51044 bytes .../src/Catalog.API/Pics/27.webp | Bin 0 -> 19638 bytes .../src/Catalog.API/Pics/28.webp | Bin 0 -> 30506 bytes .../src/Catalog.API/Pics/29.webp | Bin 0 -> 31078 bytes .../src/Catalog.API/Pics/3.webp | Bin 0 -> 24420 bytes .../src/Catalog.API/Pics/30.webp | Bin 0 -> 15820 bytes .../src/Catalog.API/Pics/31.webp | Bin 0 -> 42144 bytes .../src/Catalog.API/Pics/32.webp | Bin 0 -> 22230 bytes .../src/Catalog.API/Pics/33.webp | Bin 0 -> 40332 bytes .../src/Catalog.API/Pics/34.webp | Bin 0 -> 16582 bytes .../src/Catalog.API/Pics/35.webp | Bin 0 -> 12146 bytes .../src/Catalog.API/Pics/36.webp | Bin 0 -> 19438 bytes .../src/Catalog.API/Pics/37.webp | Bin 0 -> 20278 bytes .../src/Catalog.API/Pics/38.webp | Bin 0 -> 23742 bytes .../src/Catalog.API/Pics/39.webp | Bin 0 -> 13348 bytes .../src/Catalog.API/Pics/4.webp | Bin 0 -> 30812 bytes .../src/Catalog.API/Pics/40.webp | Bin 0 -> 34214 bytes .../src/Catalog.API/Pics/41.webp | Bin 0 -> 24078 bytes .../src/Catalog.API/Pics/42.webp | Bin 0 -> 35530 bytes .../src/Catalog.API/Pics/43.webp | Bin 0 -> 25238 bytes .../src/Catalog.API/Pics/44.webp | Bin 0 -> 26782 bytes .../src/Catalog.API/Pics/45.webp | Bin 0 -> 20784 bytes .../src/Catalog.API/Pics/46.webp | Bin 0 -> 26194 bytes .../src/Catalog.API/Pics/47.webp | Bin 0 -> 19856 bytes .../src/Catalog.API/Pics/48.webp | Bin 0 -> 27834 bytes .../src/Catalog.API/Pics/49.webp | Bin 0 -> 26992 bytes .../src/Catalog.API/Pics/5.webp | Bin 0 -> 27668 bytes .../src/Catalog.API/Pics/50.webp | Bin 0 -> 41046 bytes .../src/Catalog.API/Pics/51.webp | Bin 0 -> 27456 bytes .../src/Catalog.API/Pics/52.webp | Bin 0 -> 25740 bytes .../src/Catalog.API/Pics/53.webp | Bin 0 -> 28500 bytes .../src/Catalog.API/Pics/54.webp | Bin 0 -> 33460 bytes .../src/Catalog.API/Pics/55.webp | Bin 0 -> 20312 bytes .../src/Catalog.API/Pics/56.webp | Bin 0 -> 23886 bytes .../src/Catalog.API/Pics/57.webp | Bin 0 -> 32516 bytes .../src/Catalog.API/Pics/58.webp | Bin 0 -> 21220 bytes .../src/Catalog.API/Pics/59.webp | Bin 0 -> 18296 bytes .../src/Catalog.API/Pics/6.webp | Bin 0 -> 6502 bytes .../src/Catalog.API/Pics/60.webp | Bin 0 -> 33498 bytes .../src/Catalog.API/Pics/61.webp | Bin 0 -> 43778 bytes .../src/Catalog.API/Pics/62.webp | Bin 0 -> 14800 bytes .../src/Catalog.API/Pics/63.webp | Bin 0 -> 32234 bytes .../src/Catalog.API/Pics/64.webp | Bin 0 -> 36782 bytes .../src/Catalog.API/Pics/65.webp | Bin 0 -> 42362 bytes .../src/Catalog.API/Pics/66.webp | Bin 0 -> 25212 bytes .../src/Catalog.API/Pics/67.webp | Bin 0 -> 22158 bytes .../src/Catalog.API/Pics/68.webp | Bin 0 -> 33584 bytes .../src/Catalog.API/Pics/69.webp | Bin 0 -> 26280 bytes .../src/Catalog.API/Pics/7.webp | Bin 0 -> 22468 bytes .../src/Catalog.API/Pics/70.webp | Bin 0 -> 30690 bytes .../src/Catalog.API/Pics/71.webp | Bin 0 -> 42492 bytes .../src/Catalog.API/Pics/72.webp | Bin 0 -> 33238 bytes .../src/Catalog.API/Pics/73.webp | Bin 0 -> 34186 bytes .../src/Catalog.API/Pics/74.webp | Bin 0 -> 94280 bytes .../src/Catalog.API/Pics/75.webp | Bin 0 -> 40396 bytes .../src/Catalog.API/Pics/76.webp | Bin 0 -> 28432 bytes .../src/Catalog.API/Pics/77.webp | Bin 0 -> 35688 bytes .../src/Catalog.API/Pics/78.webp | Bin 0 -> 30366 bytes .../src/Catalog.API/Pics/79.webp | Bin 0 -> 24688 bytes .../src/Catalog.API/Pics/8.webp | Bin 0 -> 19570 bytes .../src/Catalog.API/Pics/80.webp | Bin 0 -> 28224 bytes .../src/Catalog.API/Pics/81.webp | Bin 0 -> 59184 bytes .../src/Catalog.API/Pics/82.webp | Bin 0 -> 27476 bytes .../src/Catalog.API/Pics/83.webp | Bin 0 -> 16106 bytes .../src/Catalog.API/Pics/84.webp | Bin 0 -> 23794 bytes .../src/Catalog.API/Pics/85.webp | Bin 0 -> 29446 bytes .../src/Catalog.API/Pics/86.webp | Bin 0 -> 14486 bytes .../src/Catalog.API/Pics/87.webp | Bin 0 -> 33874 bytes .../src/Catalog.API/Pics/88.webp | Bin 0 -> 16650 bytes .../src/Catalog.API/Pics/89.webp | Bin 0 -> 20754 bytes .../src/Catalog.API/Pics/9.webp | Bin 0 -> 27748 bytes .../src/Catalog.API/Pics/90.webp | Bin 0 -> 22660 bytes .../src/Catalog.API/Pics/91.webp | Bin 0 -> 42720 bytes .../src/Catalog.API/Pics/92.webp | Bin 0 -> 17300 bytes .../src/Catalog.API/Pics/93.webp | Bin 0 -> 45862 bytes .../src/Catalog.API/Pics/94.webp | Bin 0 -> 34998 bytes .../src/Catalog.API/Pics/95.webp | Bin 0 -> 21868 bytes .../src/Catalog.API/Pics/96.webp | Bin 0 -> 29372 bytes .../src/Catalog.API/Pics/97.webp | Bin 0 -> 26412 bytes .../src/Catalog.API/Pics/98.webp | Bin 0 -> 14350 bytes .../src/Catalog.API/Pics/99.webp | Bin 0 -> 29942 bytes .../src/Catalog.API/Program.Testing.cs | 6 + .../src/Catalog.API/Program.cs | 21 + .../Properties/launchSettings.json | 12 + .../Catalog.API/appsettings.Development.json | 8 + .../src/Catalog.API/appsettings.json | 27 + .../Catalog.Data.Manager.csproj | 28 + .../CatalogContextSeed.cs | 70 + .../20240205033236_Initial.Designer.cs | 138 ++ .../Migrations/20240205033236_Initial.cs | 117 + .../CatalogDbContextModelSnapshot.cs | 135 ++ .../src/Catalog.Data.Manager/Program.cs | 19 + .../Properties/launchSettings.json | 25 + .../Catalog.Data.Manager/Setup/catalog.json | 911 ++++++++ .../appsettings.Development.json | 11 + .../src/Catalog.Data.Manager/appsettings.json | 9 + .../src/Catalog.Data/Catalog.Data.csproj | 14 + .../src/Catalog.Data/CatalogBrand.cs | 11 + .../src/Catalog.Data/CatalogDbContext.cs | 27 + .../src/Catalog.Data/CatalogItem.cs | 47 + .../src/Catalog.Data/CatalogType.cs | 11 + .../CatalogBrandEntityTypeConfiguration.cs | 15 + .../CatalogItemEntityTypeConfiguration.cs | 25 + .../CatalogTypeEntityTypeConfiguration.cs | 15 + .../src/Keycloak/data/import/eshop-realm.json | 1907 +++++++++++++++++ .../src/Shared/ActivityExtensions.cs | 18 + .../src/Shared/MigrateDbContextExtensions.cs | 116 + .../src/WebApp/Components/App.razor | 20 + .../WebApp/Components/Catalog/CatalogItem.cs | 16 + .../Components/Catalog/CatalogListItem.razor | 23 + .../Catalog/CatalogListItem.razor.css | 63 + .../Components/Catalog/CatalogSearch.razor | 75 + .../Catalog/CatalogSearch.razor.css | 108 + .../src/WebApp/Components/Item/ItemHelper.cs | 9 + .../WebApp/Components/Layout/FooterBar.razor | 8 + .../Components/Layout/FooterBar.razor.css | 36 + .../WebApp/Components/Layout/HeaderBar.razor | 32 + .../Components/Layout/HeaderBar.razor.css | 147 ++ .../WebApp/Components/Layout/MainLayout.razor | 12 + .../Components/Layout/MainLayout.razor.css | 18 + .../WebApp/Components/Layout/UserMenu.razor | 30 + .../Components/Layout/UserMenu.razor.css | 37 + .../Components/Pages/Catalog/Catalog.razor | 64 + .../Pages/Catalog/Catalog.razor.css | 140 ++ .../src/WebApp/Components/Pages/Error.razor | 27 + .../WebApp/Components/Pages/Error.razor.css | 21 + .../Components/Pages/Item/ItemPage.razor | 56 + .../Components/Pages/Item/ItemPage.razor.css | 75 + .../WebApp/Components/Pages/User/LogIn.razor | 71 + .../WebApp/Components/Pages/User/LogOut.razor | 5 + .../src/WebApp/Components/Routes.razor | 6 + .../src/WebApp/Components/_Imports.razor | 14 + .../WebApp/Extensions/HostingExtensions.cs | 94 + .../Extensions/NavigationManagerExtensions.cs | 16 + .../src/WebApp/Program.cs | 33 + .../src/WebApp/Properties/launchSettings.json | 23 + .../src/WebApp/Services/CatalogService.cs | 73 + .../Services/IProductImageUrlProvider.cs | 11 + .../src/WebApp/Services/LogOutService.cs | 14 + .../Services/ProductImageUrlProvider.cs | 7 + .../src/WebApp/WebApp.csproj | 22 + .../src/WebApp/appsettings.Development.json | 8 + .../src/WebApp/appsettings.json | 16 + .../src/WebApp/wwwroot/css/app.css | 291 +++ .../src/WebApp/wwwroot/css/normalize.css | 344 +++ .../fonts/open-sans-v36-latin-300.woff2 | Bin 0 -> 18656 bytes .../fonts/open-sans-v36-latin-300italic.woff2 | Bin 0 -> 19280 bytes .../fonts/open-sans-v36-latin-500.woff2 | Bin 0 -> 18740 bytes .../fonts/open-sans-v36-latin-500italic.woff2 | Bin 0 -> 19396 bytes .../fonts/open-sans-v36-latin-600.woff2 | Bin 0 -> 18628 bytes .../fonts/open-sans-v36-latin-600italic.woff2 | Bin 0 -> 19276 bytes .../fonts/open-sans-v36-latin-700.woff2 | Bin 0 -> 18232 bytes .../fonts/open-sans-v36-latin-700italic.woff2 | Bin 0 -> 18860 bytes .../fonts/open-sans-v36-latin-800.woff2 | Bin 0 -> 18628 bytes .../fonts/open-sans-v36-latin-800italic.woff2 | Bin 0 -> 19076 bytes .../fonts/open-sans-v36-latin-italic.woff2 | Bin 0 -> 19308 bytes .../fonts/open-sans-v36-latin-regular.woff2 | Bin 0 -> 18664 bytes .../plus-jakarta-sans-v8-latin-200.woff2 | Bin 0 -> 11904 bytes ...plus-jakarta-sans-v8-latin-200italic.woff2 | Bin 0 -> 12644 bytes .../plus-jakarta-sans-v8-latin-300.woff2 | Bin 0 -> 12216 bytes ...plus-jakarta-sans-v8-latin-300italic.woff2 | Bin 0 -> 13012 bytes .../plus-jakarta-sans-v8-latin-500.woff2 | Bin 0 -> 12380 bytes ...plus-jakarta-sans-v8-latin-500italic.woff2 | Bin 0 -> 13152 bytes .../plus-jakarta-sans-v8-latin-600.woff2 | Bin 0 -> 12228 bytes ...plus-jakarta-sans-v8-latin-600italic.woff2 | Bin 0 -> 13056 bytes .../plus-jakarta-sans-v8-latin-700.woff2 | Bin 0 -> 12364 bytes ...plus-jakarta-sans-v8-latin-700italic.woff2 | Bin 0 -> 13052 bytes .../plus-jakarta-sans-v8-latin-800.woff2 | Bin 0 -> 12044 bytes ...plus-jakarta-sans-v8-latin-800italic.woff2 | Bin 0 -> 12648 bytes .../plus-jakarta-sans-v8-latin-italic.woff2 | Bin 0 -> 12656 bytes .../plus-jakarta-sans-v8-latin-regular.woff2 | Bin 0 -> 11876 bytes .../src/WebApp/wwwroot/icons/arrow-left.svg | 5 + .../src/WebApp/wwwroot/icons/cart.svg | 7 + .../src/WebApp/wwwroot/icons/close.svg | 6 + .../src/WebApp/wwwroot/icons/filters.svg | 5 + .../src/WebApp/wwwroot/icons/trash.svg | 6 + .../src/WebApp/wwwroot/icons/user.svg | 4 + .../src/WebApp/wwwroot/images/apple-pay.svg | 7 + .../src/WebApp/wwwroot/images/favicon.png | Bin 0 -> 2553 bytes .../src/WebApp/wwwroot/images/google-pay.svg | 17 + .../WebApp/wwwroot/images/header-home.webp | Bin 0 -> 53746 bytes .../src/WebApp/wwwroot/images/header.webp | Bin 0 -> 45722 bytes .../src/WebApp/wwwroot/images/logo-footer.svg | 31 + .../src/WebApp/wwwroot/images/logo-header.svg | 18 + .../src/WebApp/wwwroot/images/mastercard.png | Bin 0 -> 3878 bytes .../src/WebApp/wwwroot/images/paypal.png | Bin 0 -> 1166 bytes .../src/WebApp/wwwroot/images/visa.png | Bin 0 -> 2278 bytes .../src/eShop.AppHost/KeycloakResource.cs | 62 + .../src/eShop.AppHost/Program.cs | 40 + .../Properties/launchSettings.json | 31 + .../src/eShop.AppHost/appsettings.json | 9 + .../src/eShop.AppHost/eShop.AppHost.csproj | 22 + .../AuthenticationExtensions.cs | 86 + .../ClaimsPrincipalExtensions.cs | 10 + .../ConfigurationExtensions.cs | 7 + .../HostingExtensions.cs | 117 + .../HttpClientExtensions.cs | 50 + .../OpenApiExtensions.cs | 169 ++ .../ServiceDiscoveryExtensions.cs | 25 + .../eShop.ServiceDefaults.csproj | 28 + labs/4-Add-Shopping-Basket/src/eShop.sln | 57 + .../ServerCallContextIdentityExtensions.cs | 4 +- 232 files changed, 6940 insertions(+), 40 deletions(-) create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Apis/CatalogApi.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Catalog.API.csproj create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Catalog.API.http create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/CatalogOptions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Extensions/HostingExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Model/CatalogServices.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Model/PaginatedItems.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Model/PaginationRequest.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/1.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/10.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/100.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/101.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/11.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/12.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/13.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/14.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/15.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/16.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/17.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/18.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/19.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/2.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/20.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/21.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/22.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/23.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/24.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/25.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/26.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/27.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/28.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/29.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/3.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/30.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/31.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/32.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/33.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/34.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/35.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/36.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/37.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/38.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/39.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/4.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/40.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/41.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/42.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/43.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/44.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/45.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/46.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/47.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/48.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/49.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/5.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/50.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/51.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/52.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/53.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/54.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/55.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/56.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/57.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/58.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/59.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/6.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/60.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/61.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/62.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/63.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/64.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/65.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/66.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/67.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/68.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/69.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/7.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/70.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/71.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/72.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/73.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/74.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/75.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/76.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/77.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/78.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/79.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/8.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/80.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/81.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/82.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/83.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/84.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/85.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/86.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/87.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/88.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/89.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/9.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/90.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/91.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/92.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/93.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/94.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/95.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/96.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/97.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/98.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Pics/99.webp create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Program.Testing.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Program.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/Properties/launchSettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/appsettings.Development.json create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.API/appsettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/Catalog.Data.Manager.csproj create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/CatalogContextSeed.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/Migrations/20240205033236_Initial.Designer.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/Migrations/20240205033236_Initial.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/Migrations/CatalogDbContextModelSnapshot.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/Program.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/Properties/launchSettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/Setup/catalog.json create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/appsettings.Development.json create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data.Manager/appsettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/Catalog.Data.csproj create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/CatalogBrand.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/CatalogDbContext.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/CatalogItem.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/CatalogType.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/EntityConfigurations/CatalogBrandEntityTypeConfiguration.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/EntityConfigurations/CatalogItemEntityTypeConfiguration.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Catalog.Data/EntityConfigurations/CatalogTypeEntityTypeConfiguration.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Keycloak/data/import/eshop-realm.json create mode 100644 labs/4-Add-Shopping-Basket/src/Shared/ActivityExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/Shared/MigrateDbContextExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/App.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Catalog/CatalogItem.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Catalog/CatalogListItem.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Catalog/CatalogListItem.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Catalog/CatalogSearch.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Catalog/CatalogSearch.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Item/ItemHelper.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/FooterBar.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/FooterBar.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/HeaderBar.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/HeaderBar.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/MainLayout.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/MainLayout.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/UserMenu.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Layout/UserMenu.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/Catalog/Catalog.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/Catalog/Catalog.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/Error.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/Error.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/Item/ItemPage.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/Item/ItemPage.razor.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/User/LogIn.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Pages/User/LogOut.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/Routes.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Components/_Imports.razor create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Extensions/HostingExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Extensions/NavigationManagerExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Program.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Properties/launchSettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Services/CatalogService.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Services/IProductImageUrlProvider.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Services/LogOutService.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/Services/ProductImageUrlProvider.cs create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/WebApp.csproj create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/appsettings.Development.json create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/appsettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/css/app.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/css/normalize.css create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-300.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-300italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-500.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-500italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-600.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-600italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-700.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-700italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-800.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-800italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/open-sans-v36-latin-regular.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-200.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-200italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-300.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-300italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-500.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-500italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-600.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-600italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-700.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-700italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-800.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-800italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-italic.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/fonts/plus-jakarta-sans-v8-latin-regular.woff2 create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/icons/arrow-left.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/icons/cart.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/icons/close.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/icons/filters.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/icons/trash.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/icons/user.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/apple-pay.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/favicon.png create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/google-pay.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/header-home.webp create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/header.webp create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/logo-footer.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/logo-header.svg create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/mastercard.png create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/paypal.png create mode 100644 labs/4-Add-Shopping-Basket/src/WebApp/wwwroot/images/visa.png create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.AppHost/KeycloakResource.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.AppHost/Program.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.AppHost/Properties/launchSettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.AppHost/appsettings.json create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.AppHost/eShop.AppHost.csproj create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/AuthenticationExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/ClaimsPrincipalExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/ConfigurationExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/HostingExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/HttpClientExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/OpenApiExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/ServiceDiscoveryExtensions.cs create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.ServiceDefaults/eShop.ServiceDefaults.csproj create mode 100644 labs/4-Add-Shopping-Basket/src/eShop.sln diff --git a/labs/3-Add-Identity/src/Keycloak/data/import/eshop-realm.json b/labs/3-Add-Identity/src/Keycloak/data/import/eshop-realm.json index 6361cbc..4b4ff55 100644 --- a/labs/3-Add-Identity/src/Keycloak/data/import/eshop-realm.json +++ b/labs/3-Add-Identity/src/Keycloak/data/import/eshop-realm.json @@ -255,7 +255,6 @@ "attributes" : { } } ], "security-admin-console" : [ ], - "orderingswaggerui" : [ ], "admin-cli" : [ ], "account-console" : [ ], "broker" : [ { @@ -561,42 +560,6 @@ "nodeReRegistrationTimeout" : 0, "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ], "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] - }, { - "id" : "6bbe9167-4ac5-49e3-a0ea-06fa6b9fe56c", - "clientId" : "orderingswaggerui", - "name" : "Ordering Swagger UI", - "description" : "", - "rootUrl" : "${ORDERINGAPI_HTTP}", - "adminUrl" : "${ORDERINGAPI_HTTP}", - "baseUrl" : "${ORDERINGAPI_HTTP}", - "surrogateAuthRequired" : false, - "enabled" : true, - "alwaysDisplayInConsole" : false, - "clientAuthenticatorType" : "client-secret", - "redirectUris" : [ "${ORDERINGAPI_HTTP}/*" ], - "webOrigins" : [ "${ORDERINGAPI_HTTP}" ], - "notBefore" : 0, - "bearerOnly" : false, - "consentRequired" : false, - "standardFlowEnabled" : true, - "implicitFlowEnabled" : true, - "directAccessGrantsEnabled" : true, - "serviceAccountsEnabled" : false, - "publicClient" : true, - "frontchannelLogout" : true, - "protocol" : "openid-connect", - "attributes" : { - "oidc.ciba.grant.enabled" : "false", - "post.logout.redirect.uris" : "+", - "oauth2.device.authorization.grant.enabled" : "false", - "backchannel.logout.session.required" : "true", - "backchannel.logout.revoke.offline.tokens" : "false" - }, - "authenticationFlowBindingOverrides" : { }, - "fullScopeAllowed" : true, - "nodeReRegistrationTimeout" : -1, - "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ], - "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] }, { "id" : "348d0c1d-6d87-4975-b5b1-d3f7ca245cd0", "clientId" : "realm-management", diff --git a/labs/3-Add-Identity/src/WebApp/Components/Layout/UserMenu.razor b/labs/3-Add-Identity/src/WebApp/Components/Layout/UserMenu.razor index 0a0e118..84cdf90 100644 --- a/labs/3-Add-Identity/src/WebApp/Components/Layout/UserMenu.razor +++ b/labs/3-Add-Identity/src/WebApp/Components/Layout/UserMenu.razor @@ -9,7 +9,6 @@