@startuml
skinparam monochrome true
skinparam ClassBackgroundColor White
hide empty members
hide circle
skinparam defaultFontName Arial
skinparam defaultFontSize 11
class "<b>eShopOnContainers : Product/System</b>" as __1_eShopOnContainers
class "<b>Basket Service : Microservice</b>" as __2_Basket_Service
class "<b>OrderStartedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __3_OrderStartedIntegrationEventHandler
class "<b>OrderStartedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __4_OrderStartedIntegrationEventHandler
class "<b>DeleteBasketAsync : Persistence</b>\n<b>Operation</b>" as __5_DeleteBasketAsync
class "<b>IBasketRepository : Persistence</b>\n<b>Store</b>" as __6_IBasketRepository
class "<b>GetBasketAsync : Persistence</b>\n<b>Operation</b>" as __7_GetBasketAsync
class "<b>ProductPriceChangedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __8_ProductPriceChangedIntegrationEventHandler
class "<b>ProductPriceChangedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __9_ProductPriceChangedIntegrationEventHandler
class "<b>GetUsers : Persistence Operation</b>" as __10_GetUsers
class "<b>UpdateProductAsync : Api Operation</b>" as __11_UpdateProductAsync
class "<b>CatalogController : Api Interface</b>" as __12_CatalogController
class "<b>Catalog Service : Microservice</b>" as __13_Catalog_Service
class "<b>OrderStatusChangedToPaidIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __14_OrderStatusChangedToPaidIntegrationEventHandler
class "<b>OrderStatusChangedToPaidIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __15_OrderStatusChangedToPaidIntegrationEventHandler
class "<b>OrderStatusChangedToPaidDomainEventHandler</b>\n<b>: Api Operation</b>" as __16_OrderStatusChangedToPaidDomainEventHandler
class "<b>OrderStatusChangedToPaidDomainEventHandler</b>\n<b>: Api Interface</b>" as __17_OrderStatusChangedToPaidDomainEventHandler
class "<b>Ordering Service : Microservice</b>" as __18_Ordering_Service
class "<b>OrderStockConfirmedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __19_OrderStockConfirmedIntegrationEventHandler
class "<b>OrderStockConfirmedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __20_OrderStockConfirmedIntegrationEventHandler
class "<b>OrderPaymentSucceededIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __21_OrderPaymentSucceededIntegrationEventHandler
class "<b>OrderPaymentSucceededIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __22_OrderPaymentSucceededIntegrationEventHandler
class "<b>GracePeriodConfirmedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __23_GracePeriodConfirmedIntegrationEventHandler
class "<b>GracePeriodConfirmedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __24_GracePeriodConfirmedIntegrationEventHandler
class "<b>UserCheckoutAcceptedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __25_UserCheckoutAcceptedIntegrationEventHandler
class "<b>UserCheckoutAcceptedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __26_UserCheckoutAcceptedIntegrationEventHandler
class "<b>CheckoutAsync : Api Operation</b>" as __27_CheckoutAsync
class "<b>BasketController : Api Interface</b>" as __28_BasketController
class "<b>GetBasketByIdAsync : Api Operation</b>" as __29_GetBasketByIdAsync
class "<b>UpdateBasketAsync : Api Operation</b>" as __30_UpdateBasketAsync
class "<b>UpdateBasketAsync : Persistence</b>\n<b>Operation</b>" as __31_UpdateBasketAsync
class "<b>DeleteBasketByIdAsync : Api</b>\n<b>Operation</b>" as __32_DeleteBasketByIdAsync
class "<b>OrderStockRejectedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __33_OrderStockRejectedIntegrationEventHandler
class "<b>OrderStockRejectedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __34_OrderStockRejectedIntegrationEventHandler
class "<b>OrderPaymentFailedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __35_OrderPaymentFailedIntegrationEventHandler
class "<b>OrderPaymentFailedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __36_OrderPaymentFailedIntegrationEventHandler
class "<b>OrderStatusChangedToStockConfirmedDomainEventHandler</b>\n<b>: Api Interface</b>" as __37_OrderStatusChangedToStockConfirmedDomainEventHandler
class "<b>OrderStatusChangedToStockConfirmedDomainEventHandler</b>\n<b>: Api Operation</b>" as __38_OrderStatusChangedToStockConfirmedDomainEventHandler
class "<b>FindByIdAsync : Persistence</b>\n<b>Operation</b>" as __39_FindByIdAsync
class "<b>IBuyerRepository : Persistence</b>\n<b>Store</b>" as __40_IBuyerRepository
class "<b>Add : Persistence Operation</b>" as __41_Add
class "<b>ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler</b>\n<b>: Api Operation</b>" as __42_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler
class "<b>ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler</b>\n<b>: Api Interface</b>" as __43_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler
class "<b>Update : Persistence Operation</b>" as __44_Update
class "<b>FindAsync : Persistence Operation</b>" as __45_FindAsync
class "<b>OrderStatusChangedToAwaitingValidationDomainEventHandler</b>\n<b>: Api Operation</b>" as __46_OrderStatusChangedToAwaitingValidationDomainEventHandler
class "<b>OrderStatusChangedToAwaitingValidationDomainEventHandler</b>\n<b>: Api Interface</b>" as __47_OrderStatusChangedToAwaitingValidationDomainEventHandler
class "<b>GetAsync : Persistence Operation</b>" as __48_GetAsync
class "<b>IOrderRepository : Persistence</b>\n<b>Store</b>" as __49_IOrderRepository
class "<b>Add : Persistence Operation</b>" as __50_Add
class "<b>Handle : Connection Operation</b>" as __51_Handle
class "<b>CreateOrderCommandHandler</b>\n<b>: Connection</b>" as __52_CreateOrderCommandHandler
class "<b>Update : Persistence Operation</b>" as __53_Update
class "<b>UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler</b>\n<b>: Api Operation</b>" as __54_UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler
class "<b>UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler</b>\n<b>: Api Interface</b>" as __55_UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler
class "<b>OrderShippedDomainEventHandler</b>\n<b>: Api Operation</b>" as __56_OrderShippedDomainEventHandler
class "<b>OrderShippedDomainEventHandler</b>\n<b>: Api Interface</b>" as __57_OrderShippedDomainEventHandler
class "<b>OrderCancelledDomainEventHandler</b>\n<b>: Api Operation</b>" as __58_OrderCancelledDomainEventHandler
class "<b>OrderCancelledDomainEventHandler</b>\n<b>: Api Interface</b>" as __59_OrderCancelledDomainEventHandler
class "<b>OrderStatusChangedToAwaitingValidationIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __60_OrderStatusChangedToAwaitingValidationIntegrationEventHandler
class "<b>OrderStatusChangedToAwaitingValidationIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __61_OrderStatusChangedToAwaitingValidationIntegrationEventHandler
class "<b>HomeController : Api Interface</b>" as __62_HomeController
class "<b>Index : Api Operation</b>" as __63_Index
class "<b>OrdersController : Api Interface</b>" as __64_OrdersController
class "<b>CancelOrderAsync : Api Operation</b>" as __65_CancelOrderAsync
class "<b>ShipOrderAsync : Api Operation</b>" as __66_ShipOrderAsync
class "<b>GetOrderAsync : Api Operation</b>" as __67_GetOrderAsync
class "<b>Ok : Api Operation</b>" as __68_Ok
class "<b>CreateOrderDraftFromBasketDataAsync</b>\n<b>: Api Operation</b>" as __69_CreateOrderDraftFromBasketDataAsync
class "<b>OrderStatusChangedToPaidIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __70_OrderStatusChangedToPaidIntegrationEventHandler
class "<b>OrderStatusChangedToPaidIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __71_OrderStatusChangedToPaidIntegrationEventHandler
class "<b>OrderStatusChangedToAwaitingValidationIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __72_OrderStatusChangedToAwaitingValidationIntegrationEventHandler
class "<b>OrderStatusChangedToAwaitingValidationIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __73_OrderStatusChangedToAwaitingValidationIntegrationEventHandler
class "<b>OrderStatusChangedToSubmittedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __74_OrderStatusChangedToSubmittedIntegrationEventHandler
class "<b>OrderStatusChangedToSubmittedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __75_OrderStatusChangedToSubmittedIntegrationEventHandler
class "<b>OrderStatusChangedToCancelledIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __76_OrderStatusChangedToCancelledIntegrationEventHandler
class "<b>OrderStatusChangedToCancelledIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __77_OrderStatusChangedToCancelledIntegrationEventHandler
class "<b>OrderStatusChangedToShippedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __78_OrderStatusChangedToShippedIntegrationEventHandler
class "<b>OrderStatusChangedToShippedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __79_OrderStatusChangedToShippedIntegrationEventHandler
class "<b>OrderStatusChangedToStockConfirmedIntegrationEventHandler</b>\n<b>: Api Interface</b>" as __80_OrderStatusChangedToStockConfirmedIntegrationEventHandler
class "<b>OrderStatusChangedToStockConfirmedIntegrationEventHandler</b>\n<b>: Api Operation</b>" as __81_OrderStatusChangedToStockConfirmedIntegrationEventHandler
class "<b>HomeController : Api Interface</b>" as __82_HomeController
class "<b>Index : Api Operation</b>" as __83_Index
class "<b>PicController : Api Interface</b>" as __84_PicController
class "<b>GetImageAsync : Api Operation</b>" as __85_GetImageAsync
class "<b>GetImageMimeTypeFromImageFileExtension</b>\n<b>: Api Operation</b>" as __86_GetImageMimeTypeFromImageFileExtension
class "<b>ItemsAsync : Api Operation</b>" as __87_ItemsAsync
class "<b>ItemByIdAsync : Api Operation</b>" as __88_ItemByIdAsync
class "<b>CreateProductAsync : Api Operation</b>" as __89_CreateProductAsync
class "<b>DeleteProductAsync : Api Operation</b>" as __90_DeleteProductAsync
class "<b>HomeController : Api Interface</b>" as __91_HomeController
class "<b>Index : Api Operation</b>" as __92_Index
__1_eShopOnContainers --> __2_Basket_Service: composes
__1_eShopOnContainers --> __13_Catalog_Service: composes
__1_eShopOnContainers --> __18_Ordering_Service: composes
__2_Basket_Service --> __3_OrderStartedIntegrationEventHandler: exposes
__2_Basket_Service --> __9_ProductPriceChangedIntegrationEventHandler: exposes
__2_Basket_Service --> __91_HomeController: exposes
__2_Basket_Service --> __28_BasketController: exposes
__3_OrderStartedIntegrationEventHandler --> __4_OrderStartedIntegrationEventHandler
__4_OrderStartedIntegrationEventHandler --> __5_DeleteBasketAsync: in: id: string out: boolean
__6_IBasketRepository --> __7_GetBasketAsync
__6_IBasketRepository --> __10_GetUsers
__6_IBasketRepository --> __31_UpdateBasketAsync
__6_IBasketRepository --> __5_DeleteBasketAsync
__8_ProductPriceChangedIntegrationEventHandler --> __7_GetBasketAsync: in: customerId: string out: CustomerBasket
__8_ProductPriceChangedIntegrationEventHandler --> __10_GetUsers: in: None out: string
__9_ProductPriceChangedIntegrationEventHandler --> __8_ProductPriceChangedIntegrationEventHandler
__11_UpdateProductAsync --> __8_ProductPriceChangedIntegrationEventHandler: in: @event: ProductPriceChangedIntegrationEvent\nout: None
__12_CatalogController --> __87_ItemsAsync
__12_CatalogController --> __88_ItemByIdAsync
__12_CatalogController --> __11_UpdateProductAsync
__12_CatalogController --> __89_CreateProductAsync
__12_CatalogController --> __90_DeleteProductAsync
__13_Catalog_Service --> __14_OrderStatusChangedToPaidIntegrationEventHandler: exposes
__13_Catalog_Service --> __61_OrderStatusChangedToAwaitingValidationIntegrationEventHandler: exposes
__13_Catalog_Service --> __82_HomeController: exposes
__13_Catalog_Service --> __12_CatalogController: exposes
__13_Catalog_Service --> __84_PicController: exposes
__14_OrderStatusChangedToPaidIntegrationEventHandler --> __15_OrderStatusChangedToPaidIntegrationEventHandler
__16_OrderStatusChangedToPaidDomainEventHandler --> __39_FindByIdAsync: in: id: string out: Buyer
__16_OrderStatusChangedToPaidDomainEventHandler --> __48_GetAsync: in: orderId: int out: Order
__16_OrderStatusChangedToPaidDomainEventHandler --> __15_OrderStatusChangedToPaidIntegrationEventHandler: in: @event: OrderStatusChangedToPaidIntegrationEvent\nout: None
__17_OrderStatusChangedToPaidDomainEventHandler --> __16_OrderStatusChangedToPaidDomainEventHandler
__18_Ordering_Service --> __19_OrderStockConfirmedIntegrationEventHandler: exposes
__18_Ordering_Service --> __21_OrderPaymentSucceededIntegrationEventHandler: exposes
__18_Ordering_Service --> __23_GracePeriodConfirmedIntegrationEventHandler: exposes
__18_Ordering_Service --> __25_UserCheckoutAcceptedIntegrationEventHandler: exposes
__18_Ordering_Service --> __33_OrderStockRejectedIntegrationEventHandler: exposes
__18_Ordering_Service --> __35_OrderPaymentFailedIntegrationEventHandler: exposes
__18_Ordering_Service --> __37_OrderStatusChangedToStockConfirmedDomainEventHandler: exposes
__18_Ordering_Service --> __17_OrderStatusChangedToPaidDomainEventHandler: exposes
__18_Ordering_Service --> __55_UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler: exposes
__18_Ordering_Service --> __47_OrderStatusChangedToAwaitingValidationDomainEventHandler: exposes
__18_Ordering_Service --> __57_OrderShippedDomainEventHandler: exposes
__18_Ordering_Service --> __43_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler: exposes
__18_Ordering_Service --> __59_OrderCancelledDomainEventHandler: exposes
__18_Ordering_Service --> __62_HomeController: exposes
__18_Ordering_Service --> __64_OrdersController: exposes
__18_Ordering_Service --> __70_OrderStatusChangedToPaidIntegrationEventHandler: exposes
__18_Ordering_Service --> __72_OrderStatusChangedToAwaitingValidationIntegrationEventHandler: exposes
__18_Ordering_Service --> __74_OrderStatusChangedToSubmittedIntegrationEventHandler: exposes
__18_Ordering_Service --> __76_OrderStatusChangedToCancelledIntegrationEventHandler: exposes
__18_Ordering_Service --> __78_OrderStatusChangedToShippedIntegrationEventHandler: exposes
__18_Ordering_Service --> __80_OrderStatusChangedToStockConfirmedIntegrationEventHandler: exposes
__19_OrderStockConfirmedIntegrationEventHandler --> __20_OrderStockConfirmedIntegrationEventHandler
__21_OrderPaymentSucceededIntegrationEventHandler --> __22_OrderPaymentSucceededIntegrationEventHandler
__23_GracePeriodConfirmedIntegrationEventHandler --> __24_GracePeriodConfirmedIntegrationEventHandler
__25_UserCheckoutAcceptedIntegrationEventHandler --> __26_UserCheckoutAcceptedIntegrationEventHandler
__27_CheckoutAsync --> __7_GetBasketAsync: in: customerId: string out: CustomerBasket
__27_CheckoutAsync --> __26_UserCheckoutAcceptedIntegrationEventHandler: in: @event: UserCheckoutAcceptedIntegrationEvent\nout: None
__28_BasketController --> __29_GetBasketByIdAsync
__28_BasketController --> __30_UpdateBasketAsync
__28_BasketController --> __27_CheckoutAsync
__28_BasketController --> __32_DeleteBasketByIdAsync
__29_GetBasketByIdAsync --> __7_GetBasketAsync: in: customerId: string out: CustomerBasket
__30_UpdateBasketAsync --> __31_UpdateBasketAsync: in: basket: CustomerBasket\nout: CustomerBasket
__32_DeleteBasketByIdAsync --> __5_DeleteBasketAsync: in: id: string out: boolean
__33_OrderStockRejectedIntegrationEventHandler --> __34_OrderStockRejectedIntegrationEventHandler
__35_OrderPaymentFailedIntegrationEventHandler --> __36_OrderPaymentFailedIntegrationEventHandler
__37_OrderStatusChangedToStockConfirmedDomainEventHandler --> __38_OrderStatusChangedToStockConfirmedDomainEventHandler
__38_OrderStatusChangedToStockConfirmedDomainEventHandler --> __39_FindByIdAsync: in: id: string out: Buyer
__38_OrderStatusChangedToStockConfirmedDomainEventHandler --> __48_GetAsync: in: orderId: int out: Order
__40_IBuyerRepository --> __41_Add
__40_IBuyerRepository --> __44_Update
__40_IBuyerRepository --> __45_FindAsync
__40_IBuyerRepository --> __39_FindByIdAsync
__42_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler --> __41_Add: in: buyer: Buyer out: Buyer
__42_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler --> __44_Update: in: buyer: Buyer out: Buyer
__42_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler --> __45_FindAsync: in: BuyerIdentityGuid: string\nout: Buyer
__43_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler --> __42_ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler
__46_OrderStatusChangedToAwaitingValidationDomainEventHandler --> __39_FindByIdAsync: in: id: string out: Buyer
__46_OrderStatusChangedToAwaitingValidationDomainEventHandler --> __48_GetAsync: in: orderId: int out: Order
__46_OrderStatusChangedToAwaitingValidationDomainEventHandler --> __60_OrderStatusChangedToAwaitingValidationIntegrationEventHandler: in: @event: OrderStatusChangedToAwaitingValidationIntegrationEvent\nout: None
__47_OrderStatusChangedToAwaitingValidationDomainEventHandler --> __46_OrderStatusChangedToAwaitingValidationDomainEventHandler
__49_IOrderRepository --> __50_Add
__49_IOrderRepository --> __53_Update
__49_IOrderRepository --> __48_GetAsync
__51_Handle --> __50_Add: in: order: Order out: Order
__51_Handle --> __4_OrderStartedIntegrationEventHandler: in: @event: OrderStartedIntegrationEvent\nout: None
__52_CreateOrderCommandHandler --> __51_Handle
__54_UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler --> __48_GetAsync: in: orderId: int out: Order
__55_UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler --> __54_UpdateOrderWhenBuyerAndPaymentMethodVerifiedDomainEventHandler
__56_OrderShippedDomainEventHandler --> __39_FindByIdAsync: in: id: string out: Buyer
__56_OrderShippedDomainEventHandler --> __48_GetAsync: in: orderId: int out: Order
__57_OrderShippedDomainEventHandler --> __56_OrderShippedDomainEventHandler
__58_OrderCancelledDomainEventHandler --> __39_FindByIdAsync: in: id: string out: Buyer
__58_OrderCancelledDomainEventHandler --> __48_GetAsync: in: orderId: int out: Order
__59_OrderCancelledDomainEventHandler --> __58_OrderCancelledDomainEventHandler
__61_OrderStatusChangedToAwaitingValidationIntegrationEventHandler --> __60_OrderStatusChangedToAwaitingValidationIntegrationEventHandler
__62_HomeController --> __63_Index
__64_OrdersController --> __65_CancelOrderAsync
__64_OrdersController --> __66_ShipOrderAsync
__64_OrdersController --> __67_GetOrderAsync
__64_OrdersController --> __68_Ok
__64_OrdersController --> __69_CreateOrderDraftFromBasketDataAsync
__70_OrderStatusChangedToPaidIntegrationEventHandler --> __71_OrderStatusChangedToPaidIntegrationEventHandler
__72_OrderStatusChangedToAwaitingValidationIntegrationEventHandler --> __73_OrderStatusChangedToAwaitingValidationIntegrationEventHandler
__74_OrderStatusChangedToSubmittedIntegrationEventHandler --> __75_OrderStatusChangedToSubmittedIntegrationEventHandler
__76_OrderStatusChangedToCancelledIntegrationEventHandler --> __77_OrderStatusChangedToCancelledIntegrationEventHandler
__78_OrderStatusChangedToShippedIntegrationEventHandler --> __79_OrderStatusChangedToShippedIntegrationEventHandler
__80_OrderStatusChangedToStockConfirmedIntegrationEventHandler --> __81_OrderStatusChangedToStockConfirmedIntegrationEventHandler
__82_HomeController --> __83_Index
__84_PicController --> __85_GetImageAsync
__84_PicController --> __86_GetImageMimeTypeFromImageFileExtension
__91_HomeController --> __92_Index
@enduml
