Sha256: f7eb12a8c734c6f1fc4c7c6660998dfcdbf1da27550cdb3d3966b5d489ffadf2

Contents?: true

Size: 1.43 KB

Versions: 7

Compression:

Stored size: 1.43 KB

Contents

module SandthornDriverSequel
  class EventQuery
    def initialize(storage)
      @storage = storage
    end

    def build(
      aggregate_types: [],
      take: 0,
      after_sequence_number: 0)

      aggregate_types.map!(&:to_s)

      query = storage.events
      query = add_aggregate_types(query, aggregate_types)
      query = add_sequence_number(query, after_sequence_number)
      query = add_select(query)
      query = add_limit(query, take)
      @query = query.order(:sequence_number)
    end

    def events
      @query.all
    end

    private

    attr_reader :storage

    def add_limit(query, take)
      if take > 0
        query.limit(take)
      else
        query
      end
    end

    def add_select(query)
      query.select(*select_columns)
    end

    def select_columns
      rel = Sequel.qualify(storage.events_table_name, :aggregate_version)
      [
        :aggregate_type,
        rel,
        :aggregate_id,
        :sequence_number,
        :event_name,
        :event_data,
        :timestamp
      ]
    end

    def add_sequence_number(query, after_sequence_number)
      query.where { sequence_number > after_sequence_number }
    end

    def add_aggregate_types(query, aggregate_types)
      if aggregate_types.any?
        query.join(storage.aggregates, id: :aggregate_table_id, aggregate_type: aggregate_types)
      else
        query.join(storage.aggregates, id: :aggregate_table_id)
      end
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sandthorn_driver_sequel-3.2.1 lib/sandthorn_driver_sequel/event_query.rb
sandthorn_driver_sequel-3.2.0 lib/sandthorn_driver_sequel/event_query.rb
sandthorn_driver_sequel-3.1.0 lib/sandthorn_driver_sequel/event_query.rb
sandthorn_driver_sequel-3.0.0 lib/sandthorn_driver_sequel/event_query.rb
sandthorn_driver_sequel-2.1.1 lib/sandthorn_driver_sequel/event_query.rb
sandthorn_driver_sequel-2.1.0 lib/sandthorn_driver_sequel/event_query.rb
sandthorn_driver_sequel-2.0.1 lib/sandthorn_driver_sequel/event_query.rb