gitextract_kui8zjym/ ├── .aspire/ │ └── settings.json ├── .config/ │ ├── CredScanSuppressions.json │ ├── configuration.vs.winget │ ├── configuration.vsCode.winget │ └── tsaoptions.json ├── .devcenter/ │ └── catalog/ │ └── definitions/ │ └── imagedefinition.yaml ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── dependabot.yml │ └── workflows/ │ ├── markdownlint-problem-matcher.json │ ├── markdownlint.yml │ ├── playwright.yml │ ├── pr-validation-maui.yml │ └── pr-validation.yml ├── .gitignore ├── .markdownlint.json ├── .markdownlintignore ├── .spectral.yml ├── CODE-OF-CONDUCT.md ├── CONTRIBUTING.md ├── Directory.Build.props ├── Directory.Build.targets ├── Directory.Packages.props ├── LICENSE ├── README.md ├── build/ │ ├── acr-build/ │ │ └── queue-all.ps1 │ └── multiarch-manifests/ │ └── create-manifests.ps1 ├── ci.yml ├── e2e/ │ ├── AddItemTest.spec.ts │ ├── BrowseItemTest.spec.ts │ ├── RemoveItemTest.spec.ts │ └── login.setup.ts ├── eShop.Web.slnf ├── eShop.slnx ├── es-metadata.yml ├── global.json ├── nuget.config ├── package.json ├── playwright.config.ts ├── src/ │ ├── Basket.API/ │ │ ├── Basket.API.csproj │ │ ├── Extensions/ │ │ │ ├── Extensions.cs │ │ │ └── ServerCallContextIdentityExtensions.cs │ │ ├── GlobalUsings.cs │ │ ├── Grpc/ │ │ │ └── BasketService.cs │ │ ├── IntegrationEvents/ │ │ │ ├── EventHandling/ │ │ │ │ └── OrderStartedIntegrationEventHandler.cs │ │ │ └── Events/ │ │ │ └── OrderStartedIntegrationEvent.cs │ │ ├── Model/ │ │ │ ├── BasketItem.cs │ │ │ └── CustomerBasket.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Proto/ │ │ │ └── basket.proto │ │ ├── Repositories/ │ │ │ ├── IBasketRepository.cs │ │ │ └── RedisBasketRepository.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Catalog.API/ │ │ ├── Apis/ │ │ │ └── CatalogApi.cs │ │ ├── Catalog.API.csproj │ │ ├── Catalog.API.http │ │ ├── Catalog.API.json │ │ ├── Catalog.API_v2.json │ │ ├── CatalogOptions.cs │ │ ├── Extensions/ │ │ │ ├── Extensions.cs │ │ │ └── HostEnvironmentExtensions.cs │ │ ├── GlobalUsings.cs │ │ ├── Infrastructure/ │ │ │ ├── CatalogContext.cs │ │ │ ├── CatalogContextSeed.cs │ │ │ ├── EntityConfigurations/ │ │ │ │ ├── CatalogBrandEntityTypeConfiguration.cs │ │ │ │ ├── CatalogItemEntityTypeConfiguration.cs │ │ │ │ └── CatalogTypeEntityTypeConfiguration.cs │ │ │ ├── Exceptions/ │ │ │ │ └── CatalogDomainException.cs │ │ │ └── Migrations/ │ │ │ ├── 20231009153249_Initial.Designer.cs │ │ │ ├── 20231009153249_Initial.cs │ │ │ ├── 20231018163051_RemoveHiLoAndIndexCatalogName.Designer.cs │ │ │ ├── 20231018163051_RemoveHiLoAndIndexCatalogName.cs │ │ │ ├── 20231026091140_Outbox.Designer.cs │ │ │ ├── 20231026091140_Outbox.cs │ │ │ └── CatalogContextModelSnapshot.cs │ │ ├── IntegrationEvents/ │ │ │ ├── CatalogIntegrationEventService.cs │ │ │ ├── EventHandling/ │ │ │ │ ├── AnyFutureIntegrationEventHandler.cs.txt │ │ │ │ ├── OrderStatusChangedToAwaitingValidationIntegrationEventHandler.cs │ │ │ │ └── OrderStatusChangedToPaidIntegrationEventHandler.cs │ │ │ ├── Events/ │ │ │ │ ├── ConfirmedOrderStockItem.cs │ │ │ │ ├── OrderStatusChangedToAwaitingValidationIntegrationEvent.cs │ │ │ │ ├── OrderStatusChangedToPaidIntegrationEvent.cs │ │ │ │ ├── OrderStockConfirmedIntegrationEvent.cs │ │ │ │ ├── OrderStockItem.cs │ │ │ │ ├── OrderStockRejectedIntegrationEvent.cs │ │ │ │ └── ProductPriceChangedIntegrationEvent.cs │ │ │ └── ICatalogIntegrationEventService.cs │ │ ├── Model/ │ │ │ ├── CatalogBrand.cs │ │ │ ├── CatalogItem.cs │ │ │ ├── CatalogServices.cs │ │ │ ├── CatalogType.cs │ │ │ ├── PaginatedItems.cs │ │ │ └── PaginationRequest.cs │ │ ├── Program.Testing.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Services/ │ │ │ ├── CatalogAI.cs │ │ │ └── ICatalogAI.cs │ │ ├── Setup/ │ │ │ └── catalog.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── ClientApp/ │ │ ├── Animations/ │ │ │ ├── Base/ │ │ │ │ ├── AnimationBase.cs │ │ │ │ └── EasingType.cs │ │ │ ├── FadeToAnimation.cs │ │ │ └── StoryBoard.cs │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AppActions.cs │ │ ├── AppShell.xaml │ │ ├── AppShell.xaml.cs │ │ ├── ClientApp.csproj │ │ ├── ClientApp.sln │ │ ├── Controls/ │ │ │ ├── AddBasketButton.xaml │ │ │ ├── AddBasketButton.xaml.cs │ │ │ ├── CustomTabbedPage.cs │ │ │ └── ToggleButton.cs │ │ ├── Converters/ │ │ │ ├── DoesNotHaveCountConverter.cs │ │ │ ├── DoubleConverter.cs │ │ │ ├── FirstValidationErrorConverter.cs │ │ │ ├── HasCountConverter.cs │ │ │ ├── ItemsToHeightConverter.cs │ │ │ ├── WebNavigatedEventArgsConverter.cs │ │ │ └── WebNavigatingEventArgsConverter.cs │ │ ├── Effects/ │ │ │ ├── EntryLineColorEffect.cs │ │ │ └── ThemeEffects.cs │ │ ├── Exceptions/ │ │ │ └── ServiceAuthenticationException.cs │ │ ├── Extensions/ │ │ │ ├── DictionaryExtensions.cs │ │ │ ├── ICommandExtensions.cs │ │ │ └── VisualElementExtensions.cs │ │ ├── GlobalSuppressions.cs │ │ ├── GlobalUsings.cs │ │ ├── Helpers/ │ │ │ ├── EasingHelper.cs │ │ │ └── UriHelper.cs │ │ ├── MauiProgram.cs │ │ ├── Messages/ │ │ │ └── ProductCountChangedMessage.cs │ │ ├── Models/ │ │ │ ├── Basket/ │ │ │ │ ├── BasketItem.cs │ │ │ │ └── CustomerBasket.cs │ │ │ ├── Catalog/ │ │ │ │ ├── CatalogBrand.cs │ │ │ │ ├── CatalogItem.cs │ │ │ │ ├── CatalogRoot.cs │ │ │ │ └── CatalogType.cs │ │ │ ├── Location/ │ │ │ │ ├── GeolocationError.cs │ │ │ │ ├── GeolocationException.cs │ │ │ │ ├── Location.cs │ │ │ │ └── Position.cs │ │ │ ├── Marketing/ │ │ │ │ ├── Campaign.cs │ │ │ │ ├── CampaignItem.cs │ │ │ │ └── CampaignRoot.cs │ │ │ ├── Navigation/ │ │ │ │ └── TabParameter.cs │ │ │ ├── Orders/ │ │ │ │ ├── CancelOrderCommand.cs │ │ │ │ ├── CardType.cs │ │ │ │ ├── Order.cs │ │ │ │ ├── OrderCheckout.cs │ │ │ │ └── OrderItem.cs │ │ │ ├── Permissions/ │ │ │ │ ├── Permission.cs │ │ │ │ └── PermissionStatus.cs │ │ │ ├── Token/ │ │ │ │ └── UserToken.cs │ │ │ └── User/ │ │ │ ├── Address.cs │ │ │ ├── LogoutParameter.cs │ │ │ ├── PaymentInfo.cs │ │ │ └── UserInfo.cs │ │ ├── Platforms/ │ │ │ ├── Android/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── MainActivity.cs │ │ │ │ ├── MainApplication.cs │ │ │ │ ├── Resources/ │ │ │ │ │ ├── values/ │ │ │ │ │ │ └── colors.xml │ │ │ │ │ └── xml/ │ │ │ │ │ └── network_security_config.xml │ │ │ │ └── WebAuthenticationCallbackActivity.cs │ │ │ ├── MacCatalyst/ │ │ │ │ ├── AppDelegate.cs │ │ │ │ ├── Entitlements.Debug.plist │ │ │ │ ├── Entitlements.Release.plist │ │ │ │ ├── Info.plist │ │ │ │ └── Program.cs │ │ │ ├── Windows/ │ │ │ │ ├── App.xaml │ │ │ │ ├── App.xaml.cs │ │ │ │ ├── Package.appxmanifest │ │ │ │ └── app.manifest │ │ │ └── iOS/ │ │ │ ├── AppDelegate.cs │ │ │ ├── Entitlements.plist │ │ │ ├── Info.plist │ │ │ └── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Resources/ │ │ │ ├── Fonts/ │ │ │ │ ├── FontAwesomeRegular.otf │ │ │ │ └── FontAwesomeSolid.otf │ │ │ ├── Raw/ │ │ │ │ └── AboutAssets.txt │ │ │ └── Styles/ │ │ │ ├── Colors.xaml │ │ │ └── Styles.xaml │ │ ├── Services/ │ │ │ ├── AppEnvironment/ │ │ │ │ ├── AppEnvironmentService.cs │ │ │ │ └── IAppEnvironmentService.cs │ │ │ ├── Basket/ │ │ │ │ ├── BasketMockService.cs │ │ │ │ ├── BasketService.cs │ │ │ │ ├── IBasketService.cs │ │ │ │ └── Protos/ │ │ │ │ ├── Basket.cs │ │ │ │ ├── BasketGrpc.cs │ │ │ │ └── basket.proto │ │ │ ├── Catalog/ │ │ │ │ ├── CatalogMockService.cs │ │ │ │ ├── CatalogService.cs │ │ │ │ └── ICatalogService.cs │ │ │ ├── Common/ │ │ │ │ └── Common.cs │ │ │ ├── Dialog/ │ │ │ │ ├── DialogService.cs │ │ │ │ └── IDialogService.cs │ │ │ ├── EShopJsonSerializerContext.cs │ │ │ ├── FixUri/ │ │ │ │ ├── FixUriService.cs │ │ │ │ └── IFixUriService.cs │ │ │ ├── Identity/ │ │ │ │ ├── AuthorizeRequest.cs │ │ │ │ ├── IIdentityService.cs │ │ │ │ ├── IdentityMockService.cs │ │ │ │ └── IdentityService.cs │ │ │ ├── Location/ │ │ │ │ ├── ILocationService.cs │ │ │ │ └── LocationService.cs │ │ │ ├── Navigation/ │ │ │ │ ├── INavigationService.cs │ │ │ │ └── MauiNavigationService.cs │ │ │ ├── OpenUrl/ │ │ │ │ ├── IOpenUrlService.cs │ │ │ │ └── OpenUrlService.cs │ │ │ ├── Order/ │ │ │ │ ├── IOrderService.cs │ │ │ │ ├── OrderMockService.cs │ │ │ │ └── OrderService.cs │ │ │ ├── RequestProvider/ │ │ │ │ ├── HttpRequestExceptionEx.cs │ │ │ │ ├── IRequestProvider.cs │ │ │ │ └── RequestProvider.cs │ │ │ ├── Settings/ │ │ │ │ ├── ISettingsService.cs │ │ │ │ └── SettingsService.cs │ │ │ └── Theme/ │ │ │ ├── ITheme.cs │ │ │ └── Theme.shared.cs │ │ ├── Triggers/ │ │ │ └── BeginAnimation.cs │ │ ├── Validations/ │ │ │ ├── IValidationRule.cs │ │ │ ├── IValidity.cs │ │ │ ├── IsNotNullOrEmptyRule.cs │ │ │ └── ValidatableObject.cs │ │ ├── ViewModels/ │ │ │ ├── Base/ │ │ │ │ ├── IViewModelBase.cs │ │ │ │ └── ViewModelBase.cs │ │ │ ├── BasketViewModel.cs │ │ │ ├── CatalogItemViewModel.cs │ │ │ ├── CatalogViewModel.cs │ │ │ ├── CheckoutViewModel.cs │ │ │ ├── LoginViewModel.cs │ │ │ ├── MainViewModel.cs │ │ │ ├── MapViewModel.cs │ │ │ ├── ObservableCollectionEx.cs │ │ │ ├── OrderDetailViewModel.cs │ │ │ ├── ProfileViewModel.cs │ │ │ ├── SelectionViewModel.cs │ │ │ └── SettingsViewModel.cs │ │ └── Views/ │ │ ├── BadgeView.cs │ │ ├── BasketView.xaml │ │ ├── BasketView.xaml.cs │ │ ├── CatalogItemView.xaml │ │ ├── CatalogItemView.xaml.cs │ │ ├── CatalogView.xaml │ │ ├── CatalogView.xaml.cs │ │ ├── CheckoutView.xaml │ │ ├── CheckoutView.xaml.cs │ │ ├── ContentPageBase.cs │ │ ├── CustomNavigationView.xaml │ │ ├── CustomNavigationView.xaml.cs │ │ ├── FiltersView.xaml │ │ ├── FiltersView.xaml.cs │ │ ├── LoginView.xaml │ │ ├── LoginView.xaml.cs │ │ ├── MapView.xaml │ │ ├── MapView.xaml.cs │ │ ├── MauiAuthenticationBrowser.cs │ │ ├── OrderDetailView.xaml │ │ ├── OrderDetailView.xaml.cs │ │ ├── ProfileView.xaml │ │ ├── ProfileView.xaml.cs │ │ ├── SettingsView.xaml │ │ ├── SettingsView.xaml.cs │ │ └── Templates/ │ │ ├── BasketItemTemplate.xaml │ │ ├── BasketItemTemplate.xaml.cs │ │ ├── CampaignTemplate.xaml │ │ ├── CampaignTemplate.xaml.cs │ │ ├── OrderItemTemplate.xaml │ │ ├── OrderItemTemplate.xaml.cs │ │ ├── OrderTemplate.xaml │ │ ├── OrderTemplate.xaml.cs │ │ ├── ProductTemplate.xaml │ │ └── ProductTemplate.xaml.cs │ ├── EventBus/ │ │ ├── Abstractions/ │ │ │ ├── EventBusSubscriptionInfo.cs │ │ │ ├── IEventBus.cs │ │ │ ├── IEventBusBuilder.cs │ │ │ └── IIntegrationEventHandler.cs │ │ ├── EventBus.csproj │ │ ├── Events/ │ │ │ └── IntegrationEvent.cs │ │ ├── Extensions/ │ │ │ ├── EventBusBuilderExtensions.cs │ │ │ └── GenericTypeExtensions.cs │ │ └── GlobalUsings.cs │ ├── EventBusRabbitMQ/ │ │ ├── EventBusOptions.cs │ │ ├── EventBusRabbitMQ.csproj │ │ ├── GlobalUsings.cs │ │ ├── RabbitMQEventBus.cs │ │ ├── RabbitMQTelemetry.cs │ │ └── RabbitMqDependencyInjectionExtensions.cs │ ├── HybridApp/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── Components/ │ │ │ ├── Layout/ │ │ │ │ ├── FooterBar.razor │ │ │ │ ├── FooterBar.razor.css │ │ │ │ ├── HeaderBar.razor │ │ │ │ ├── HeaderBar.razor.css │ │ │ │ ├── MainLayout.razor │ │ │ │ └── MainLayout.razor.css │ │ │ ├── Pages/ │ │ │ │ ├── Catalog/ │ │ │ │ │ ├── Catalog.razor │ │ │ │ │ ├── Catalog.razor.css │ │ │ │ │ ├── CatalogSearch.razor │ │ │ │ │ └── CatalogSearch.razor.css │ │ │ │ └── Item/ │ │ │ │ ├── ItemPage.razor │ │ │ │ └── ItemPage.razor.css │ │ │ ├── Routes.razor │ │ │ └── _Imports.razor │ │ ├── GlobalSuppressions.cs │ │ ├── HybridApp.csproj │ │ ├── MainPage.xaml │ │ ├── MainPage.xaml.cs │ │ ├── MauiProgram.cs │ │ ├── Platforms/ │ │ │ ├── Android/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── MainActivity.cs │ │ │ │ ├── MainApplication.cs │ │ │ │ └── Resources/ │ │ │ │ ├── values/ │ │ │ │ │ └── colors.xml │ │ │ │ └── xml/ │ │ │ │ └── network_security_config.xml │ │ │ ├── MacCatalyst/ │ │ │ │ ├── AppDelegate.cs │ │ │ │ ├── Entitlements.Debug.plist │ │ │ │ ├── Entitlements.Release.plist │ │ │ │ ├── Info.plist │ │ │ │ └── Program.cs │ │ │ ├── Tizen/ │ │ │ │ ├── Main.cs │ │ │ │ └── tizen-manifest.xml │ │ │ ├── Windows/ │ │ │ │ ├── App.xaml │ │ │ │ ├── App.xaml.cs │ │ │ │ ├── Package.appxmanifest │ │ │ │ └── app.manifest │ │ │ └── iOS/ │ │ │ ├── AppDelegate.cs │ │ │ ├── Info.plist │ │ │ └── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Resources/ │ │ │ └── Raw/ │ │ │ └── AboutAssets.txt │ │ ├── Services/ │ │ │ ├── CatalogJsonContext.cs │ │ │ ├── CatalogService.cs │ │ │ └── ProductImageUrlProvider.cs │ │ └── wwwroot/ │ │ ├── css/ │ │ │ ├── app.css │ │ │ └── normalize.css │ │ └── index.html │ ├── Identity.API/ │ │ ├── .gitignore │ │ ├── Configuration/ │ │ │ └── Config.cs │ │ ├── Data/ │ │ │ ├── ApplicationDbContext.cs │ │ │ └── Migrations/ │ │ │ ├── 20230925223402_InitialMigration.Designer.cs │ │ │ ├── 20230925223402_InitialMigration.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── GlobalUsings.cs │ │ ├── Identity.API.csproj │ │ ├── Models/ │ │ │ ├── AccountViewModels/ │ │ │ │ ├── ForgotPasswordViewModel.cs │ │ │ │ ├── LoggedOutViewModel.cs │ │ │ │ ├── LoginViewModel.cs │ │ │ │ ├── LogoutViewModel.cs │ │ │ │ ├── RedirectViewModel.cs │ │ │ │ ├── RegisterViewModel.cs │ │ │ │ ├── ResetPasswordViewModel.cs │ │ │ │ ├── SendCodeViewModel.cs │ │ │ │ └── VerifyCodeViewModel.cs │ │ │ ├── ApplicationUser.cs │ │ │ ├── ConsentViewModels/ │ │ │ │ ├── ConsentInputModel.cs │ │ │ │ ├── ConsentOptions.cs │ │ │ │ ├── ConsentViewModel.cs │ │ │ │ ├── ProcessConsentResult.cs │ │ │ │ └── ScopeViewModel.cs │ │ │ ├── ErrorViewModel.cs │ │ │ └── ManageViewModels/ │ │ │ ├── AddPhoneNumberViewModel.cs │ │ │ ├── ChangePasswordViewModel.cs │ │ │ ├── ConfigureTwoFactorViewModel.cs │ │ │ ├── FactorViewModel.cs │ │ │ ├── IndexViewModel.cs │ │ │ ├── SetPasswordViewModel.cs │ │ │ └── VerifyPhoneNumberViewModel.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Quickstart/ │ │ │ ├── Account/ │ │ │ │ ├── AccountController.cs │ │ │ │ ├── AccountOptions.cs │ │ │ │ ├── ExternalController.cs │ │ │ │ ├── ExternalProvider.cs │ │ │ │ ├── LoggedOutViewModel.cs │ │ │ │ ├── LoginInputModel.cs │ │ │ │ ├── LoginViewModel.cs │ │ │ │ ├── LogoutInputModel.cs │ │ │ │ ├── LogoutViewModel.cs │ │ │ │ └── RedirectViewModel.cs │ │ │ ├── Consent/ │ │ │ │ ├── ConsentController.cs │ │ │ │ ├── ConsentInputModel.cs │ │ │ │ ├── ConsentOptions.cs │ │ │ │ ├── ConsentViewModel.cs │ │ │ │ ├── ProcessConsentResult.cs │ │ │ │ └── ScopeViewModel.cs │ │ │ ├── Device/ │ │ │ │ ├── DeviceAuthorizationInputModel.cs │ │ │ │ ├── DeviceAuthorizationViewModel.cs │ │ │ │ └── DeviceController.cs │ │ │ ├── Diagnostics/ │ │ │ │ ├── DiagnosticsController.cs │ │ │ │ └── DiagnosticsViewModel.cs │ │ │ ├── Extensions.cs │ │ │ ├── Grants/ │ │ │ │ ├── GrantsController.cs │ │ │ │ └── GrantsViewModel.cs │ │ │ ├── Home/ │ │ │ │ ├── ErrorViewModel.cs │ │ │ │ └── HomeController.cs │ │ │ └── SecurityHeadersAttribute.cs │ │ ├── Services/ │ │ │ ├── EFLoginService.cs │ │ │ ├── ILoginService.cs │ │ │ ├── IRedirectService.cs │ │ │ ├── ProfileService.cs │ │ │ └── RedirectService.cs │ │ ├── UsersSeed.cs │ │ ├── Views/ │ │ │ ├── Account/ │ │ │ │ ├── AccessDenied.cshtml │ │ │ │ ├── LoggedOut.cshtml │ │ │ │ ├── Login.cshtml │ │ │ │ └── Logout.cshtml │ │ │ ├── Consent/ │ │ │ │ └── Index.cshtml │ │ │ ├── Device/ │ │ │ │ ├── Success.cshtml │ │ │ │ ├── UserCodeCapture.cshtml │ │ │ │ └── UserCodeConfirmation.cshtml │ │ │ ├── Diagnostics/ │ │ │ │ └── Index.cshtml │ │ │ ├── Grants/ │ │ │ │ └── Index.cshtml │ │ │ ├── Home/ │ │ │ │ └── Index.cshtml │ │ │ ├── Shared/ │ │ │ │ ├── Error.cshtml │ │ │ │ ├── Redirect.cshtml │ │ │ │ ├── _Layout.cshtml │ │ │ │ ├── _ScopeListItem.cshtml │ │ │ │ └── _ValidationSummary.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── bundleconfig.json │ │ ├── libman.json │ │ ├── tempkey.jwk │ │ └── wwwroot/ │ │ ├── _references.js │ │ ├── css/ │ │ │ └── site.css │ │ └── js/ │ │ ├── signin-redirect.js │ │ ├── signout-redirect.js │ │ └── site.js │ ├── IntegrationEventLogEF/ │ │ ├── EventStateEnum.cs │ │ ├── GlobalUsings.cs │ │ ├── IntegrationEventLogEF.csproj │ │ ├── IntegrationEventLogEntry.cs │ │ ├── IntegrationLogExtensions.cs │ │ ├── Services/ │ │ │ ├── IIntegrationEventLogService.cs │ │ │ └── IntegrationEventLogService.cs │ │ └── Utilities/ │ │ └── ResilientTransaction.cs │ ├── OrderProcessor/ │ │ ├── BackgroundTaskOptions.cs │ │ ├── Events/ │ │ │ └── GracePeriodConfirmedIntegrationEvent.cs │ │ ├── Extensions/ │ │ │ └── Extensions.cs │ │ ├── GlobalUsings.cs │ │ ├── OrderProcessor.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Services/ │ │ │ └── GracePeriodManagerService.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Ordering.API/ │ │ ├── Apis/ │ │ │ ├── OrderServices.cs │ │ │ └── OrdersApi.cs │ │ ├── Application/ │ │ │ ├── Behaviors/ │ │ │ │ ├── LoggingBehavior.cs │ │ │ │ ├── TransactionBehavior.cs │ │ │ │ └── ValidatorBehavior.cs │ │ │ ├── Commands/ │ │ │ │ ├── CancelOrderCommand.cs │ │ │ │ ├── CancelOrderCommandHandler.cs │ │ │ │ ├── CreateOrderCommand.cs │ │ │ │ ├── CreateOrderCommandHandler.cs │ │ │ │ ├── CreateOrderDraftCommand.cs │ │ │ │ ├── CreateOrderDraftCommandHandler.cs │ │ │ │ ├── IdentifiedCommand.cs │ │ │ │ ├── IdentifiedCommandHandler.cs │ │ │ │ ├── SetAwaitingValidationOrderStatusCommand.cs │ │ │ │ ├── SetAwaitingValidationOrderStatusCommandHandler.cs │ │ │ │ ├── SetPaidOrderStatusCommand.cs │ │ │ │ ├── SetPaidOrderStatusCommandHandler.cs │ │ │ │ ├── SetStockConfirmedOrderStatusCommand.cs │ │ │ │ ├── SetStockConfirmedOrderStatusCommandHandler.cs │ │ │ │ ├── SetStockRejectedOrderStatusCommand.cs │ │ │ │ ├── SetStockRejectedOrderStatusCommandHandler.cs │ │ │ │ ├── ShipOrderCommand.cs │ │ │ │ └── ShipOrderCommandHandler.cs │ │ │ ├── DomainEventHandlers/ │ │ │ │ ├── OrderCancelledDomainEventHandler.cs │ │ │ │ ├── OrderShippedDomainEventHandler.cs │ │ │ │ ├── OrderStatusChangedToAwaitingValidationDomainEventHandler.cs │ │ │ │ ├── OrderStatusChangedToPaidDomainEventHandler.cs │ │ │ │ ├── OrderStatusChangedToStockConfirmedDomainEventHandler.cs │ │ │ │ ├── UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler.cs │ │ │ │ └── ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler.cs │ │ │ ├── IntegrationEvents/ │ │ │ │ ├── EventHandling/ │ │ │ │ │ ├── GracePeriodConfirmedIntegrationEventHandler.cs │ │ │ │ │ ├── OrderPaymentFailedIntegrationEventHandler.cs │ │ │ │ │ ├── OrderPaymentSucceededIntegrationEventHandler.cs │ │ │ │ │ ├── OrderStockConfirmedIntegrationEventHandler.cs │ │ │ │ │ └── OrderStockRejectedIntegrationEventHandler.cs │ │ │ │ ├── Events/ │ │ │ │ │ ├── GracePeriodConfirmedIntegrationEvent.cs │ │ │ │ │ ├── OrderPaymentFailedIntegrationEvent .cs │ │ │ │ │ ├── OrderPaymentSucceededIntegrationEvent.cs │ │ │ │ │ ├── OrderStartedIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToAwaitingValidationIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToCancelledIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToPaidIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToShippedIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToStockConfirmedIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedTosubmittedIntegrationEvent.cs │ │ │ │ │ ├── OrderStockConfirmedIntegrationEvent.cs │ │ │ │ │ └── OrderStockRejectedIntegrationEvent.cs │ │ │ │ ├── IOrderingIntegrationEventService.cs │ │ │ │ └── OrderingIntegrationEventService.cs │ │ │ ├── Models/ │ │ │ │ ├── BasketItem.cs │ │ │ │ └── CustomerBasket.cs │ │ │ ├── Queries/ │ │ │ │ ├── IOrderQueries.cs │ │ │ │ ├── OrderQueries.cs │ │ │ │ └── OrderViewModel.cs │ │ │ └── Validations/ │ │ │ ├── CancelOrderCommandValidator.cs │ │ │ ├── CreateOrderCommandValidator.cs │ │ │ ├── IdentifiedCommandValidator.cs │ │ │ └── ShipOrderCommandValidator.cs │ │ ├── Extensions/ │ │ │ ├── BasketItemExtensions.cs │ │ │ ├── Extensions.cs │ │ │ ├── LinqSelectExtensions.cs │ │ │ └── OrderingApiTrace.cs │ │ ├── GlobalUsings.cs │ │ ├── Infrastructure/ │ │ │ ├── OrderingContextSeed.cs │ │ │ └── Services/ │ │ │ ├── IIdentityService.cs │ │ │ └── IdentityService.cs │ │ ├── Ordering.API.csproj │ │ ├── Program.Testing.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Ordering.Domain/ │ │ ├── AggregatesModel/ │ │ │ ├── BuyerAggregate/ │ │ │ │ ├── Buyer.cs │ │ │ │ ├── CardType.cs │ │ │ │ ├── IBuyerRepository.cs │ │ │ │ └── PaymentMethod.cs │ │ │ └── OrderAggregate/ │ │ │ ├── Address.cs │ │ │ ├── IOrderRepository.cs │ │ │ ├── Order.cs │ │ │ ├── OrderItem.cs │ │ │ └── OrderStatus.cs │ │ ├── Events/ │ │ │ ├── BuyerPaymentMethodVerifiedDomainEvent.cs │ │ │ ├── OrderCancelledDomainEvent.cs │ │ │ ├── OrderShippedDomainEvent.cs │ │ │ ├── OrderStartedDomainEvent.cs │ │ │ ├── OrderStatusChangedToAwaitingValidationDomainEvent.cs │ │ │ ├── OrderStatusChangedToPaidDomainEvent.cs │ │ │ └── OrderStatusChangedToStockConfirmedDomainEvent.cs │ │ ├── Exceptions/ │ │ │ └── OrderingDomainException.cs │ │ ├── GlobalUsings.cs │ │ ├── Ordering.Domain.csproj │ │ └── SeedWork/ │ │ ├── Entity.cs │ │ ├── IAggregateRoot.cs │ │ ├── IRepository.cs │ │ ├── IUnitOfWork.cs │ │ └── ValueObject.cs │ ├── Ordering.Infrastructure/ │ │ ├── EntityConfigurations/ │ │ │ ├── BuyerEntityTypeConfiguration.cs │ │ │ ├── CardTypeEntityTypeConfiguration.cs │ │ │ ├── ClientRequestEntityTypeConfiguration.cs │ │ │ ├── OrderEntityTypeConfiguration.cs │ │ │ ├── OrderItemEntityTypeConfiguration.cs │ │ │ └── PaymentMethodEntityTypeConfiguration.cs │ │ ├── GlobalUsings.cs │ │ ├── Idempotency/ │ │ │ ├── ClientRequest.cs │ │ │ ├── IRequestManager.cs │ │ │ └── RequestManager.cs │ │ ├── MediatorExtension.cs │ │ ├── Migrations/ │ │ │ ├── 20230925222426_Initial.Designer.cs │ │ │ ├── 20230925222426_Initial.cs │ │ │ ├── 20231021004633_FixOrderitemseqSchema.Designer.cs │ │ │ ├── 20231021004633_FixOrderitemseqSchema.cs │ │ │ ├── 20231026091055_Outbox.Designer.cs │ │ │ ├── 20231026091055_Outbox.cs │ │ │ ├── 20240106121712_UseEnumForOrderStatus.Designer.cs │ │ │ ├── 20240106121712_UseEnumForOrderStatus.cs │ │ │ └── OrderingContextModelSnapshot.cs │ │ ├── Ordering.Infrastructure.csproj │ │ ├── OrderingContext.cs │ │ └── Repositories/ │ │ ├── BuyerRepository.cs │ │ └── OrderRepository.cs │ ├── PaymentProcessor/ │ │ ├── GlobalUsings.cs │ │ ├── IntegrationEvents/ │ │ │ ├── EventHandling/ │ │ │ │ └── OrderStatusChangedToStockConfirmedIntegrationEventHandler.cs │ │ │ └── Events/ │ │ │ ├── OrderPaymentFailedIntegrationEvent.cs │ │ │ ├── OrderPaymentSucceededIntegrationEvent.cs │ │ │ └── OrderStatusChangedToStockConfirmedIntegrationEvent.cs │ │ ├── PaymentOptions.cs │ │ ├── PaymentProcessor.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Shared/ │ │ ├── ActivityExtensions.cs │ │ └── MigrateDbContextExtensions.cs │ ├── WebApp/ │ │ ├── Components/ │ │ │ ├── App.razor │ │ │ ├── Chatbot/ │ │ │ │ ├── ChatState.cs │ │ │ │ ├── Chatbot.razor │ │ │ │ ├── Chatbot.razor.css │ │ │ │ ├── Chatbot.razor.js │ │ │ │ ├── MessageProcessor.cs │ │ │ │ ├── ShowChatbotButton.razor │ │ │ │ └── ShowChatbotButton.razor.css │ │ │ ├── Layout/ │ │ │ │ ├── CartMenu.razor │ │ │ │ ├── CartMenu.razor.css │ │ │ │ ├── FooterBar.razor │ │ │ │ ├── FooterBar.razor.css │ │ │ │ ├── HeaderBar.razor │ │ │ │ ├── HeaderBar.razor.css │ │ │ │ ├── MainLayout.razor │ │ │ │ ├── MainLayout.razor.css │ │ │ │ ├── UserMenu.razor │ │ │ │ └── UserMenu.razor.css │ │ │ ├── Pages/ │ │ │ │ ├── Cart/ │ │ │ │ │ ├── CartPage.razor │ │ │ │ │ └── CartPage.razor.css │ │ │ │ ├── Catalog/ │ │ │ │ │ ├── Catalog.razor │ │ │ │ │ └── Catalog.razor.css │ │ │ │ ├── Checkout/ │ │ │ │ │ ├── Checkout.razor │ │ │ │ │ └── Checkout.razor.css │ │ │ │ ├── Item/ │ │ │ │ │ ├── ItemPage.razor │ │ │ │ │ └── ItemPage.razor.css │ │ │ │ └── User/ │ │ │ │ ├── LogIn.razor │ │ │ │ ├── LogOut.razor │ │ │ │ ├── Orders.razor │ │ │ │ ├── Orders.razor.css │ │ │ │ └── OrdersRefreshOnStatusChange.razor │ │ │ ├── Routes.razor │ │ │ └── _Imports.razor │ │ ├── Extensions/ │ │ │ └── Extensions.cs │ │ ├── GlobalUsings.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Services/ │ │ │ ├── BasketCheckoutInfo.cs │ │ │ ├── BasketItem.cs │ │ │ ├── BasketService.cs │ │ │ ├── BasketState.cs │ │ │ ├── IBasketState.cs │ │ │ ├── LogOutService.cs │ │ │ ├── OrderStatus/ │ │ │ │ ├── IntegrationEvents/ │ │ │ │ │ ├── EventHandling/ │ │ │ │ │ │ ├── OrderStatusChangedToAwaitingValidationIntegrationEventHandler.cs │ │ │ │ │ │ ├── OrderStatusChangedToCancelledIntegrationEventHandler.cs │ │ │ │ │ │ ├── OrderStatusChangedToPaidIntegrationEventHandler.cs │ │ │ │ │ │ ├── OrderStatusChangedToShippedIntegrationEventHandler.cs │ │ │ │ │ │ ├── OrderStatusChangedToStockConfirmedIntegrationEventHandler.cs │ │ │ │ │ │ └── OrderStatusChangedToSubmittedIntegrationEventHandler.cs │ │ │ │ │ └── Events/ │ │ │ │ │ ├── OrderStatusChangedToAwaitingValidationIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToCancelledIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToPaidIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToShippedIntegrationEvent.cs │ │ │ │ │ ├── OrderStatusChangedToStockConfirmedIntegrationEvent.cs │ │ │ │ │ └── OrderStatusChangedToSubmittedIntegrationEvent.cs │ │ │ │ └── OrderStatusNotificationService.cs │ │ │ ├── OrderingService.cs │ │ │ └── ProductImageUrlProvider.cs │ │ ├── WebApp.csproj │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── wwwroot/ │ │ └── css/ │ │ ├── app.css │ │ └── normalize.css │ ├── WebAppComponents/ │ │ ├── Catalog/ │ │ │ ├── CatalogItem.cs │ │ │ ├── CatalogListItem.razor │ │ │ ├── CatalogListItem.razor.css │ │ │ ├── CatalogSearch.razor │ │ │ └── CatalogSearch.razor.css │ │ ├── Item/ │ │ │ └── ItemHelper.cs │ │ ├── Services/ │ │ │ ├── CatalogService.cs │ │ │ ├── ICatalogService.cs │ │ │ └── IProductImageUrlProvider.cs │ │ ├── WebAppComponents.csproj │ │ └── _Imports.razor │ ├── WebhookClient/ │ │ ├── Components/ │ │ │ ├── App.razor │ │ │ ├── App.razor.css │ │ │ ├── Layout/ │ │ │ │ ├── MainLayout.razor │ │ │ │ ├── MainLayout.razor.css │ │ │ │ ├── UserMenu.razor │ │ │ │ └── UserMenu.razor.css │ │ │ ├── Pages/ │ │ │ │ ├── AddWebhook.razor │ │ │ │ ├── Error.razor │ │ │ │ ├── Home/ │ │ │ │ │ ├── Home.razor │ │ │ │ │ ├── Home.razor.css │ │ │ │ │ ├── ReceivedMessages.razor │ │ │ │ │ └── RegisteredHooks.razor │ │ │ │ └── LogIn.razor │ │ │ ├── Routes.razor │ │ │ └── _Imports.razor │ │ ├── Endpoints/ │ │ │ ├── AuthenticationEndpoints.cs │ │ │ └── WebhookEndpoints.cs │ │ ├── Extensions/ │ │ │ └── Extensions.cs │ │ ├── GlobalUsings.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Services/ │ │ │ ├── HooksRepository.cs │ │ │ ├── WebHookReceived.cs │ │ │ ├── WebHooksClient.cs │ │ │ ├── WebhookClientOptions.cs │ │ │ ├── WebhookData.cs │ │ │ ├── WebhookResponse.cs │ │ │ ├── WebhookSubscriptionRequest.cs │ │ │ └── WebhookType.cs │ │ ├── WebhookClient.csproj │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── wwwroot/ │ │ └── app.css │ ├── Webhooks.API/ │ │ ├── Apis/ │ │ │ └── WebHooksApi.cs │ │ ├── Exceptions/ │ │ │ └── WebhooksDomainException.cs │ │ ├── Extensions/ │ │ │ ├── Extensions.cs │ │ │ └── RouteHandlerBuilderExtensions.cs │ │ ├── GlobalUsings.cs │ │ ├── Infrastructure/ │ │ │ └── WebhooksContext.cs │ │ ├── IntegrationEvents/ │ │ │ ├── OrderStatusChangedToPaidIntegrationEvent.cs │ │ │ ├── OrderStatusChangedToPaidIntegrationEventHandler.cs │ │ │ ├── OrderStatusChangedToShippedIntegrationEvent.cs │ │ │ ├── OrderStatusChangedToShippedIntegrationEventHandler.cs │ │ │ ├── OrderStockItem.cs │ │ │ ├── ProductPriceChangedIntegrationEvent.cs │ │ │ └── ProductPriceChangedIntegrationEventHandler.cs │ │ ├── Migrations/ │ │ │ ├── 20230925222606_Initial.Designer.cs │ │ │ ├── 20230925222606_Initial.cs │ │ │ └── WebhooksContextModelSnapshot.cs │ │ ├── Model/ │ │ │ ├── WebhookData.cs │ │ │ ├── WebhookSubscription.cs │ │ │ ├── WebhookSubscriptionRequest.cs │ │ │ └── WebhookType.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Services/ │ │ │ ├── GrantUrlTesterService.cs │ │ │ ├── IGrantUrlTesterService.cs │ │ │ ├── IWebhooksRetriever.cs │ │ │ ├── IWebhooksSender.cs │ │ │ ├── WebhooksRetriever.cs │ │ │ └── WebhooksSender.cs │ │ ├── Webhooks.API.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── eShop.AppHost/ │ │ ├── Extensions.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── appsettings.json │ │ └── eShop.AppHost.csproj │ └── eShop.ServiceDefaults/ │ ├── AuthenticationExtensions.cs │ ├── ClaimsPrincipalExtensions.cs │ ├── ConfigurationExtensions.cs │ ├── Extensions.cs │ ├── HttpClientExtensions.cs │ ├── OpenApi.Extensions.cs │ ├── OpenApiOptionsExtensions.cs │ └── eShop.ServiceDefaults.csproj └── tests/ ├── Basket.UnitTests/ │ ├── Basket.UnitTests.csproj │ ├── BasketServiceTests.cs │ ├── GlobalUsings.cs │ └── Helpers/ │ └── TestServerCallContext.cs ├── Catalog.FunctionalTests/ │ ├── Catalog.FunctionalTests.csproj │ ├── CatalogApiFixture.cs │ ├── CatalogApiTests.cs │ └── GlobalUsings.cs ├── ClientApp.UnitTests/ │ ├── ClientApp.UnitTests.csproj │ ├── ClientApp.UnitTests.sln │ ├── GlobalUsings.cs │ ├── Mocks/ │ │ ├── MockDialogService.cs │ │ ├── MockNavigationService.cs │ │ ├── MockSettingsService.cs │ │ └── MockViewModel.cs │ ├── Services/ │ │ ├── BasketServiceTests.cs │ │ ├── CatalogServiceTests.cs │ │ └── OrdersServiceTests.cs │ ├── TestingExtensions.cs │ └── ViewModels/ │ ├── CatalogItemViewModelTests.cs │ ├── CatalogViewModelTests.cs │ ├── MainViewModelTests.cs │ ├── MockViewModelTests.cs │ └── OrderViewModelTests.cs ├── Directory.Build.props ├── Ordering.FunctionalTests/ │ ├── AutoAuthorizeMiddleware.cs │ ├── GlobalUsings.cs │ ├── Ordering.FunctionalTests.csproj │ ├── OrderingApiFixture.cs │ └── OrderingApiTests.cs ├── Ordering.UnitTests/ │ ├── Application/ │ │ ├── IdentifiedCommandHandlerTest.cs │ │ ├── NewOrderCommandHandlerTest.cs │ │ ├── OrdersWebApiTest.cs │ │ └── SetStockRejectedOrderStatusCommandTest.cs │ ├── Builders.cs │ ├── Domain/ │ │ ├── BuyerAggregateTest.cs │ │ ├── OrderAggregateTest.cs │ │ └── SeedWork/ │ │ └── ValueObjectTests.cs │ ├── GlobalUsings.cs │ └── Ordering.UnitTests.csproj └── README.md