Sha256: d2b96116c734d86f2b296bae31ee75dab952803ff863fd18e9c8079afa1de531

Contents?: true

Size: 1.3 KB

Versions: 52

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

require_dependency "renalware/feeds"

module Renalware
  module Feeds
    class PersistMessage
      # hl7_message is an HL7Message (a decorator around ::HL7::Message)
      # If the same message is persisted twice we'll get an ActiveRecord::RecordNotUnique error
      # but that's fine as we don't want to process the same HL7 message twice.
      # rubocop:disable Metrics/MethodLength
      def call(hl7_message)
        body_hash = Digest::MD5.hexdigest(hl7_message.to_hl7)
        Message.create!(
          event_code: hl7_message.type,
          header_id: hl7_message.header_id,
          body: hl7_message.to_s,
          body_hash: body_hash,
          patient_identifier: hl7_message.patient_identification&.internal_id
        )
      rescue ActiveRecord::RecordNotUnique
        # If a duplicate messages comes in (we have calculated the body_hash for the message and it
        # turns out that body_hash is not unique in the database, meaning the message is already
        # stored) then raise a custom error so it can be handled upstream - ie we can choose to
        # ignore it.
        raise(
          DuplicateMessageError,
          "header_id=#{hl7_message.header_id}, body_hash=#{body_hash}"
        )
      end
      # rubocop:enable Metrics/MethodLength
    end
  end
end

Version data entries

52 entries across 52 versions & 1 rubygems

Version Path
renalware-core-2.1.1 app/models/renalware/feeds/persist_message.rb
renalware-core-2.1.0 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.167 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.166 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.165 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.164 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.163 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.162 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.161 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.160 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.159 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.158 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.157 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.156 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.155 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.153 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.152 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.151 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.149 app/models/renalware/feeds/persist_message.rb
renalware-core-2.0.148 app/models/renalware/feeds/persist_message.rb