E-Commerce Event Model

Version: 2.0.0 | Release: 2024-Q1 | Domain: Online Shopping
Product Browsing Workflow
State View v2.0
Browse Products
Events (Source)
ProductListed
productId: Guid
name: string
price: decimal
category: string
Read Model
ProductCatalog
products: Product list
categories: string list
Screen
Product Listing Page
Given / Then Scenarios
GIVEN
ProductListed "Laptop" 999.99
ProductListed "Mouse" 29.99
THEN
ProductCatalog.products.Length = 2
Swimlane: Product
ProductBrowsing.Browse
State View v2.0
Search Products
Events (Source)
ProductIndexed
productId: Guid
searchTerms: string list
tags: string list
Read Model
SearchResults
query: string
matches: Product list
count: int
Screen
Search Results Page
Given / Then Scenarios
GIVEN
ProductIndexed id1 ["laptop", "dell"]
ProductIndexed id2 ["mouse", "wireless"]
THEN
SearchResults "laptop" returns 1 match
Swimlane: Product
ProductBrowsing.Search
Shopping Cart Workflow
State Change v2.0
Add Item to Cart
Screen
Product Detail Page
Command
AddItemToCart
cartId: Guid
productId: Guid
quantity: int
price: decimal
Event
ItemAddedToCart
cartId: Guid
productId: Guid
quantity: int
price: decimal
timestamp: DateTime
Given / When / Then Scenarios
GIVEN
CartCreated cartId1
WHEN
AddItemToCart cartId1 prod1 2 29.99
THEN
ItemAddedToCart cartId1 prod1 2 29.99
Swimlane: Cart
ShoppingCart.AddItem
State View v2.0
View Cart
Events (Source)
ItemAddedToCart
ItemRemovedFromCart
CartCreated
(Multiple event types)
Read Model
CartSummary
cartId: Guid
items: CartItem list
totalAmount: decimal
itemCount: int
Screen
Shopping Cart Page
Given / Then Scenarios
GIVEN
CartCreated cartId1
ItemAddedToCart cartId1 prod1 2 29.99
ItemAddedToCart cartId1 prod2 1 99.99
THEN
CartSummary.totalAmount = 159.97
CartSummary.itemCount = 3
Swimlane: Cart
ShoppingCart.ViewCart
Third Party Integration v2.0
Apply Discount
Automation
Discount Service API
Read Model (Input)
CartForDiscount
cartId: Guid
customerId: Guid
totalAmount: decimal
Command
ApplyDiscount
cartId: Guid
discountCode: string
discountAmount: decimal
Event
DiscountApplied
cartId: Guid
discountCode: string
discountAmount: decimal
finalAmount: decimal
Given / When / Then Scenarios
GIVEN
CartWithTotal cartId1 100.00
WHEN
ApplyDiscount cartId1 "SAVE10" 10.00
THEN
DiscountApplied cartId1 "SAVE10" 10.00 90.00
Swimlane: Cart
ShoppingCart.Discount
Checkout Workflow
State Change v2.0
Complete Checkout
Screen
Checkout Page
Command
CompleteCheckout
cartId: Guid
paymentMethod: PaymentType
shippingAddress: Address
customerEmail: string
Event
CheckoutCompleted
orderId: Guid
cartId: Guid
totalAmount: decimal
orderDate: DateTime
Given / When / Then Scenarios
GIVEN
CartWithItems cartId1 [item1; item2]
CustomerVerified custId1
WHEN
CompleteCheckout cartId1 CreditCard addr1 email1
THEN
CheckoutCompleted orderId1 cartId1 159.97
Swimlane: Checkout
Checkout.Complete
Third Party Integration v2.0
Process Payment
Automation
Payment Gateway API
Read Model (Input)
PaymentRequest
orderId: Guid
amount: decimal
paymentMethod: PaymentType
Command
ProcessPayment
orderId: Guid
transactionId: string
status: PaymentStatus
Event
PaymentProcessed
orderId: Guid
transactionId: string
status: PaymentStatus
processedAt: DateTime
Given / When / Then Scenarios
GIVEN
CheckoutCompleted orderId1 cartId1 159.97
WHEN
ProcessPayment orderId1 "TX123" Success
THEN
PaymentProcessed orderId1 "TX123" Success
Swimlane: Payment
Payment.Process
State View v2.0
Order Confirmation
Events (Source)
CheckoutCompleted
PaymentProcessed
OrderConfirmed
(Multiple event types)
Read Model
OrderDetails
orderId: Guid
customerEmail: string
items: OrderItem list
totalAmount: decimal
status: OrderStatus
Screen
Order Confirmation Page
Given / Then Scenarios
GIVEN
CheckoutCompleted orderId1 cartId1 159.97
PaymentProcessed orderId1 "TX123" Success
OrderConfirmed orderId1
THEN
OrderDetails.status = Confirmed
OrderDetails.totalAmount = 159.97
Swimlane: Order
Order.Confirmation