Skip to content

Commit 257a4df

Browse files
committed
Update pipeline and mapper to their final form.
1 parent 1394637 commit 257a4df

File tree

1 file changed

+18
-23
lines changed

1 file changed

+18
-23
lines changed

posts/2025-09-12-evolving-event-names-and-payloads-in-rails-event-store-without-breaking-history.md

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ We decided to create a custom `Transformations::RefundToReturnEventMapper`and in
5252
mapper = RubyEventStore::Mappers::PipelineMapper.new(
5353
RubyEventStore::Mappers::Pipeline.new(
5454
Transformations::RefundToReturnEventMapper.new(
55-
'Ordering::DraftRefundCreated' => 'Ordering::DraftReturnCreated',
56-
'Ordering::ItemAddedToRefund' => 'Ordering::ItemAddedToReturn',
57-
'Ordering::ItemRemovedFromRefund' => 'Ordering::ItemRemovedFromReturn'
58-
),
55+
'Ordering::DraftRefundCreated' => 'Ordering::DraftReturnCreated',
56+
'Ordering::ItemAddedToRefund' => 'Ordering::ItemAddedToReturn',
57+
'Ordering::ItemRemovedFromRefund' => 'Ordering::ItemRemovedFromReturn'
58+
),
5959
RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new,
60-
RubyEventStore::Mappers::Transformation::PreserveTypes.new
60+
to_domain_event: RubyEventStore::Mappers::Transformation::DomainEvent.new
6161
)
6262
)
6363
client = RailsEventStore::JSONClient.new(mapper: mapper)
@@ -90,20 +90,14 @@ module Transformations
9090

9191
if old_class_name != new_class_name
9292
transformed_data = transform_payload(record.data, old_class_name)
93-
begin
94-
metadata_json = record.metadata.respond_to?(:to_json) ? record.metadata.to_json : record.metadata.to_h.to_json
95-
RubyEventStore::SerializedRecord.new(
96-
event_id: record.event_id,
97-
event_type: new_class_name,
98-
data: transformed_data.to_json,
99-
metadata: metadata_json,
100-
timestamp: record.timestamp,
101-
valid_at: record.valid_at
102-
)
103-
rescue => e
104-
puts "Mapper error: #{e.message}, falling back to original record"
105-
record
106-
end
93+
RubyEventStore::Record.new(
94+
event_id: record.event_id,
95+
event_type: new_class_name,
96+
data: transformed_data,
97+
metadata: record.metadata,
98+
timestamp: record.timestamp,
99+
valid_at: record.valid_at
100+
)
107101
else
108102
record
109103
end
@@ -128,10 +122,10 @@ module Transformations
128122
def transform_payload(data, old_class_name)
129123
case old_class_name
130124
when 'Ordering::DraftRefundCreated'
131-
data = transform_key(data, :refund_id, :return_id)
132-
transform_key(data, :refundable_products, :returnable_products)
125+
data = transform_refund_to_return_payload(data, "refund_id", "return_id")
126+
transform_refund_to_return_payload(data, "refundable_products", "returnable_products")
133127
when 'Ordering::ItemAddedToRefund', 'Ordering::ItemRemovedFromRefund'
134-
transform_key(data, :refund_id, :return_id)
128+
transform_refund_to_return_payload(data, "refund_id", "return_id")
135129
else
136130
data
137131
end
@@ -177,7 +171,8 @@ While `Transformation::Upcast` is pipeline-compatible and would work with our tr
177171
RubyEventStore::Mappers::Pipeline.new(
178172
RubyEventStore::Mappers::Transformation::Upcast.new(upcast_map),
179173
RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new,
180-
RubyEventStore::Mappers::Transformation::PreserveTypes.new
174+
RubyEventStore::Mappers::Transformation::PreserveTypes.new,
175+
to_domain_event: RubyEventStore::Mappers::Transformation::DomainEvent.new
181176
)
182177
)
183178

0 commit comments

Comments
 (0)