class EventStoreClient::GRPC::Commands::Streams::Append

Public Instance Methods

call(stream, events, options: {}) click to toggle source

@api private TODO: Add support to verify the expected version

# File lib/event_store_client/adapters/grpc/commands/streams/append.rb, line 19
def call(stream, events, options: {}) # rubocop:disable Lint/UnusedMethodArgument,Metrics/LineLength
  serialized_events = events.map { |event| config.mapper.serialize(event) }

  serialized_events.each do |event|
    event_metadata = JSON.parse(event.metadata)
    custom_metadata = {
      "type": event.type,
      "created_at": Time.now,
      'content-type': event_metadata['content-type']
    }
    custom_metadata['encryption'] = event_metadata['encryption'] unless event_metadata['encryption'].nil?
    custom_metadata['transaction'] = event_metadata['transaction'] unless event_metadata['transaction'].nil?
    event_metadata = event_metadata.select { |k| ['type', 'content-type', 'created_at'].include?(k) }

    payload = [
      request.new(
        options: {
          stream_identifier: {
            streamName: stream
          },
          any: {}
        }
      ),
      request.new(
        proposed_message: {
          id: {
            string: SecureRandom.uuid
          },
          data: event.data.b,
          custom_metadata: JSON.generate(custom_metadata),
          metadata: event_metadata
        }
      )
    ]
    service.append(payload, metadata: metadata)
  end
  Success(events)
end