Skip to content

Commit bde95f6

Browse files
Extracted OrderHeaader read model from Orders
Orders was already too big. Also, there were clear "boxes" of data visually on the site. Which can be a heuristic to make it a new read model. cleanups: Shipments no longer rely on Orders::Order, they never should
1 parent 9ddf271 commit bde95f6

40 files changed

+151
-498
lines changed

apps/rails_application/.mutant.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ matcher:
1717
subjects:
1818
- Coupons*
1919
- Orders*
20+
- OrderHeader*
2021
- ClientOrders*
2122
- Processes*
2223
- Invoices*
@@ -25,6 +26,8 @@ matcher:
2526
ignore:
2627
- Coupons::Configuration#call
2728
- Orders::Configuration#call
29+
- Orders::Configuration#broadcast_order_state_change
30+
- OrderHeader::Configuration#call
2831
- Invoices::Configuration#call
2932
- Orders::Broadcaster*
3033
- Orders::AddItemToOrder#broadcast_to_ui

apps/rails_application/app/controllers/orders_controller.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def remove_item
7979
end
8080

8181
def create
82-
Orders::SubmitService.call(order_id: params[:order_id], customer_id: params[:customer_id])
82+
Orders::SubmitService.new(params[:order_id], params[:customer_id]).call
8383
rescue Orders::OrderHasUnavailableProducts => e
8484
unavailable_products = e.unavailable_products.join(", ")
8585
redirect_to edit_order_path(params[:order_id]), alert: "Order can not be submitted! #{unavailable_products} not available in requested quantity!"
@@ -92,7 +92,7 @@ def create
9292
end
9393

9494
def expire
95-
Orders.draft_orders.find_each { |order| command_bus.(Pricing::ExpireOffer.new(order_id: order.uid)) }
95+
OrderHeader.draft_orders.find_each { |order| command_bus.(Pricing::ExpireOffer.new(order_id: order.uid)) }
9696
redirect_to root_path
9797
end
9898

apps/rails_application/app/read_models/order_header/configuration.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class Header < ApplicationRecord
66
private_constant :Header
77

88
class Customer < ApplicationRecord
9-
self.table_name = "orders_customers"
9+
self.table_name = "order_header_customers"
1010
end
1111

1212
private_constant :Customer
@@ -15,8 +15,13 @@ def self.find_by_uid(uid)
1515
Header.find_by_uid(uid)
1616
end
1717

18+
def self.draft_orders
19+
Header.where(state: "Draft")
20+
end
21+
1822
class Configuration
1923
def call(event_store)
24+
event_store.subscribe(CreateCustomer.new, to: [Crm::CustomerRegistered])
2025
event_store.subscribe(
2126
->(event) { draft_order_header(event) },
2227
to: [Pricing::OfferDrafted]
@@ -70,7 +75,7 @@ def draft_order_header(event)
7075

7176
def assign_customer(event)
7277
customer_id = event.data.fetch(:customer_id)
73-
customer_name = Customer.find_by_uid(customer_id).name
78+
customer_name = Customer.find_by(customer_id: customer_id).name
7479
find_or_create_header(event.data.fetch(:order_id)).update!(customer: customer_name)
7580
end
7681

apps/rails_application/app/read_models/orders/add_item_to_order.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class AddItemToOrder
66

77
def call(event)
88
order_id = event.data.fetch(:order_id)
9-
Order.find_or_create_by!(uid: order_id) { |order| order.state = "Draft" }
9+
Order.find_or_create_by!(uid: order_id)
1010
product_id = event.data.fetch(:product_id)
1111
item =
1212
find(order_id, product_id) ||

apps/rails_application/app/read_models/orders/assign_customer_to_order.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ module Orders
22
class AssignCustomerToOrder
33
def call(event)
44
order_uid = event.data.fetch(:order_id)
5-
order = Order.find_or_create_by!(uid: order_uid) { |order| order.state = "Draft" }
6-
order.customer = Customer.find_by_uid(event.data.fetch(:customer_id)).name
7-
order.save!
5+
Order.find_or_create_by!(uid: order_uid)
86

97
event_store.link_event_to_stream(event, "Orders$all")
108
end

apps/rails_application/app/read_models/orders/cancel_order.rb

Lines changed: 0 additions & 18 deletions
This file was deleted.

apps/rails_application/app/read_models/orders/configuration.rb

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,6 @@ class Product < ApplicationRecord
1717

1818
private_constant :Product
1919

20-
class Customer < ApplicationRecord
21-
self.table_name = "orders_customers"
22-
end
23-
24-
private_constant :Customer
25-
2620
class OrderLine < ApplicationRecord
2721
self.table_name = "order_lines"
2822

@@ -69,17 +63,14 @@ def self.store_id_for_order(order_id)
6963
Order.find_by!(uid: order_id).store_id
7064
end
7165

72-
def self.draft_orders
73-
Order.where(state: "Draft")
74-
end
75-
7666
class Configuration
7767

7868
def call(event_store)
7969
Rails.configuration.broadcaster = Orders::Broadcaster.new
8070

8171
event_store.subscribe(DraftOrder.new, to: [Pricing::OfferDrafted])
8272
event_store.subscribe(AssignStoreToOrder.new, to: [Stores::OfferRegistered])
73+
event_store.subscribe(AssignCustomerToOrder.new, to: [Crm::CustomerAssignedToOrder])
8374
event_store.subscribe(AddItemToOrder.new, to: [Pricing::PriceItemAdded])
8475
event_store.subscribe(RemoveItemFromOrder.new, to: [Pricing::PriceItemRemoved])
8576
event_store.subscribe(UpdateDiscount.new, to: [Pricing::PercentageDiscountSet, Pricing::PercentageDiscountChanged])
@@ -88,29 +79,35 @@ def call(event_store)
8879
event_store.subscribe(RegisterProduct.new, to: [ProductCatalog::ProductRegistered])
8980
event_store.subscribe(ChangeProductName.new, to: [ProductCatalog::ProductNamed])
9081
event_store.subscribe(ChangeProductPrice.new, to: [Pricing::PriceSet])
91-
event_store.subscribe(CreateCustomer.new, to: [Crm::CustomerRegistered])
92-
event_store.subscribe(AssignCustomerToOrder.new, to: [Crm::CustomerAssignedToOrder])
93-
event_store.subscribe(SubmitOrder.new, to: [Fulfillment::OrderRegistered])
94-
event_store.subscribe(ExpireOrder.new, to: [Pricing::OfferExpired])
95-
event_store.subscribe(ConfirmOrder.new, to: [Fulfillment::OrderConfirmed])
96-
event_store.subscribe(CancelOrder.new, to: [Fulfillment::OrderCancelled])
9782
event_store.subscribe(UpdateTimePromotionDiscountValue.new, to: [Pricing::PercentageDiscountSet])
9883
event_store.subscribe(RemoveTimePromotionDiscount.new, to: [Pricing::PercentageDiscountRemoved])
9984

10085
event_store.subscribe(
101-
->(event) { broadcast_order_state_change(event.data.fetch(:order_id), 'Submitted') },
86+
->(event) {
87+
broadcast_order_state_change(event.data.fetch(:order_id), 'Submitted')
88+
event_store.link_event_to_stream(event, "Orders$all")
89+
},
10290
to: [Fulfillment::OrderRegistered]
10391
)
10492
event_store.subscribe(
105-
->(event) { broadcast_order_state_change(event.data.fetch(:order_id), "Expired") },
93+
->(event) {
94+
broadcast_order_state_change(event.data.fetch(:order_id), "Expired")
95+
event_store.link_event_to_stream(event, "Orders$all")
96+
},
10697
to: [Pricing::OfferExpired]
10798
)
10899
event_store.subscribe(
109-
->(event) { broadcast_order_state_change(event.data.fetch(:order_id), "Paid") },
100+
->(event) {
101+
broadcast_order_state_change(event.data.fetch(:order_id), "Paid")
102+
event_store.link_event_to_stream(event, "Orders$all")
103+
},
110104
to: [Fulfillment::OrderConfirmed]
111105
)
112106
event_store.subscribe(
113-
->(event) { broadcast_order_state_change(event.data.fetch(:order_id), "Cancelled") },
107+
->(event) {
108+
broadcast_order_state_change(event.data.fetch(:order_id), "Cancelled")
109+
event_store.link_event_to_stream(event, "Orders$all")
110+
},
114111
to: [Fulfillment::OrderCancelled]
115112
)
116113
end

apps/rails_application/app/read_models/orders/confirm_order.rb

Lines changed: 0 additions & 18 deletions
This file was deleted.

apps/rails_application/app/read_models/orders/create_customer.rb

Lines changed: 0 additions & 18 deletions
This file was deleted.

apps/rails_application/app/read_models/orders/draft_order.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ module Orders
22
class DraftOrder
33
def call(event)
44
Order.create(
5-
uid: event.data.fetch(:order_id),
6-
state: "Draft"
5+
uid: event.data.fetch(:order_id)
76
)
87
end
98
end

0 commit comments

Comments
 (0)