Migrating existing events
Sometimes it is convenient to update existing historical events. Instead of introducing a new event in a different version (SomethingHappened-v2
), we might prefer the simplicity of adding a new field to existing events via migration. Such as for example tenant_id
when we introduce multi-tenancy to our application. There are various trade-offs here (you are rewriting a history after all), but we assume you understand them well if you decide to go this way.
Another valid use-case can be when you decide to migrate to a different mapper (ie from YAML to Protobuf).
Note that events are updated using upsert capabilities of your MySQL, PostgreSQL or Sqlite 3.24.0+ database.
Add data and metadata to existing events
event_store.read.each_batch do |events|
events.each do |ev|
ev.data[:tenant_id] = 1
ev.metadata[:server_id] = "eu-west-2"
end
event_store.overwrite(events)
end
Change event type
event_store
.read
.of_type([OldType])
.each_batch do |events|
event_store.overwrite(events.map { |ev| NewType.new(event_id: ev.event_id, data: ev.data, metadata: ev.metadata) })
end