Class: FourthDimensional::EventLoaders::ActiveRecord

Inherits:
Object
  • Object
show all
Defined in:
lib/fourth_dimensional/event_loaders/active_record.rb

Overview

FourthDimensional::EventLoaders::ActiveRecord

FourthDimensional.configure do |config|
  config.event_loader = FourthDimensional::EventLoaders::ActiveRecord.new
end

Defined Under Namespace

Classes: Command, Event, FourthDimensionalRecord

Instance Method Summary collapse

Instance Method Details

#deserialize_event(event) ⇒ Object

Deserializes a single event.



21
22
23
24
25
26
27
28
29
# File 'lib/fourth_dimensional/event_loaders/active_record.rb', line 21

def deserialize_event(event)
  event.event_type.camelize.constantize.new(aggregate_id: event.aggregate_id,
                                            id: event.id,
                                            version: event.version,
                                            data: event.data,
                                            metadata: event.,
                                            created_at: event.created_at,
                                            updated_at: event.updated_at)
end

#for_aggregate(aggregate_id) ⇒ Object

Loads events by aggregate_id and deserializes them.

FourthDimensional.config.event_loader.for_aggregate(aggregate_id)


14
15
16
17
18
# File 'lib/fourth_dimensional/event_loaders/active_record.rb', line 14

def for_aggregate(aggregate_id)
  Event.where(aggregate_id: aggregate_id)
    .order(:version)
    .map(&method(:deserialize_event))
end

#save_commands_and_events(commands:, events:) ⇒ Object

Saves commands and events in active record compatible database.



32
33
34
35
36
37
# File 'lib/fourth_dimensional/event_loaders/active_record.rb', line 32

def save_commands_and_events(commands:, events:)
  FourthDimensionalRecord.transaction do
    create_commands!(commands)
    create_events!(events).map(&method(:deserialize_event))
  end
end