Class: SandthornDriverSequel::EventAccess

Inherits:
Access::Base show all
Defined in:
lib/sandthorn_driver_sequel/access/event_access.rb

Instance Method Summary collapse

Constructor Details

#initialize(storage, serializer, deserializer) ⇒ EventAccess

EventAccess

Reads and writes events.



8
9
10
11
12
# File 'lib/sandthorn_driver_sequel/access/event_access.rb', line 8

def initialize storage, serializer, deserializer
  @serializer = serializer
  @deserializer = deserializer
  super storage
end

Instance Method Details

#after_snapshot(snapshot) ⇒ Object

Returns events that occurred after the given snapshot



41
42
43
44
45
46
47
# File 'lib/sandthorn_driver_sequel/access/event_access.rb', line 41

def after_snapshot(snapshot)
  _aggregate_version = snapshot.aggregate_version
  aggregate_table_id = snapshot.aggregate_table_id
  wrap(storage.events
    .where(aggregate_table_id: aggregate_table_id)
    .where { aggregate_version > _aggregate_version }.all)
end

#find_events_by_aggregate_id(aggregate_id) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/sandthorn_driver_sequel/access/event_access.rb', line 23

def find_events_by_aggregate_id(aggregate_id)
  aggregate_version = Sequel.qualify(storage.events_table_name, :aggregate_version)
  wrap(storage.events
    .join(storage.aggregates, id: :aggregate_table_id)
    .where(aggregate_id: aggregate_id)
    .select(
      :sequence_number,
      :aggregate_id,
      :aggregate_table_id,
      aggregate_version,
      :event_name,
      :event_data,
      :timestamp)
    .order(:sequence_number)
    .all)
end

#get_events(*args) ⇒ Object



49
50
51
52
53
# File 'lib/sandthorn_driver_sequel/access/event_access.rb', line 49

def get_events(*args)
  query_builder = EventQuery.new(storage)
  query_builder.build(*args)
  wrap(query_builder.events)
end

#store_events(aggregate, events) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/sandthorn_driver_sequel/access/event_access.rb', line 14

def store_events(aggregate, events)
  events = Utilities.array_wrap(events)
  timestamp = Time.now.utc
  events.each do |event|
    store_event(aggregate, timestamp, event)
  end
  aggregate.save
end