Class: Synapse::EventSourcing::AggregateSnapshotTaker

Inherits:
SnapshotTaker
  • Object
show all
Defined in:
lib/synapse/event_sourcing/snapshot/aggregate_taker.rb

Overview

Snapshot taker that uses the actual aggregate and its state to create a snapshot event

Instance Method Summary collapse

Constructor Details

#initialize(event_store) ⇒ undefined

Parameters:

  • event_store (SnapshotEventStore)


7
8
9
10
# File 'lib/synapse/event_sourcing/snapshot/aggregate_taker.rb', line 7

def initialize(event_store)
  @aggregate_factories = Hash.new
  @event_store = event_store
end

Instance Method Details

#register_factory(factory) ⇒ undefined

Parameters:

Returns:

  • (undefined)


14
15
16
# File 'lib/synapse/event_sourcing/snapshot/aggregate_taker.rb', line 14

def register_factory(factory)
  @aggregate_factories.store factory.type_identifier, factory
end

#schedule_snapshot(type_identifier, aggregate_id) ⇒ undefined

Parameters:

  • type_identifier (String)
  • aggregate_id (Object)

Returns:

  • (undefined)


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/synapse/event_sourcing/snapshot/aggregate_taker.rb', line 21

def schedule_snapshot(type_identifier, aggregate_id)
  stream = @event_store.read_events type_identifier, aggregate_id
  factory = @aggregate_factories.fetch type_identifier

  aggregate = factory.create_aggregate aggregate_id, stream.peek
  aggregate.initialize_from_stream stream

  snapshot = Domain::DomainEventMessage.build do |builder|
    builder.payload = aggregate
    builder.aggregate_id = aggregate.id
    builder.sequence_number = aggregate.version
  end

  @event_store.append_snapshot_event type_identifier, snapshot
end