Class: Renalware::Feeds::PersistMessage

Inherits:
Object
  • Object
show all
Defined in:
app/models/renalware/feeds/persist_message.rb

Instance Method Summary collapse

Instance Method Details

#call(hl7_message) ⇒ Object

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.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/models/renalware/feeds/persist_message.rb', line 11

def call(hl7_message)
  Message.create!(
    event_code: hl7_message.type,
    header_id: hl7_message.header_id,
    body: hl7_message.to_s,
    body_hash: Digest::MD5.hexdigest(hl7_message.to_s),
    patient_identifier: hl7_message.patient_identification&.internal_id
  )
rescue ActiveRecord::RecordNotUnique => e
  # 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 Feeds::DuplicateMessageReceivedError, e.message
end