Skip to content

Commit dd3b7b2

Browse files
Merge pull request #20 from datacite/test-and-rework-update-logic
Test and rework update logic
2 parents c26be66 + 2250096 commit dd3b7b2

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

app/factories/event_factory.rb

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,41 @@ module EventFactory
44
class << self
55
# Creates and returns an event from the dequeued message from the events SQS queue.
66
def create_from_sqs(message)
7-
now = Time.now.utc
8-
97
Event.new(
108
uuid: message["uuid"] || SecureRandom.uuid,
119
subj_id: DoiUtilities.normalize_doi(message["subjId"]) || message["subjId"],
1210
obj_id: DoiUtilities.normalize_doi(message["objId"]) || message["objId"],
1311
source_id: message["sourceId"],
1412
aasm_state: "waiting",
1513
source_token: message["sourceToken"],
16-
created_at: now,
17-
updated_at: now,
1814
total: message["total"] || 1,
19-
occurred_at: message["occurred_at"] || now,
15+
occurred_at: message["occurred_at"] || Time.now.utc,
2016
message_action: "create",
2117
relation_type_id: message["relation_type_id"] || "references",
2218
subj: message["subj"].to_json,
2319
obj: message["obj"].to_json,
2420
license: message["license"] || "https://creativecommons.org/publicdomain/zero/1.0/",
2521
)
2622
end
23+
24+
def update_from_sqs(event, message)
25+
event.uuid = message["uuid"] if message["uuid"].present?
26+
event.source_id = message["sourceId"] if message["sourceId"].present?
27+
event.source_token = message["sourceToken"] if message["sourceToken"].present?
28+
event.total = message["total"] if message["total"].present?
29+
event.occurred_at = message["occurred_at"] if message["occurred_at"].present?
30+
event.relation_type_id = message["relation_type_id"] if message["relation_type_id"].present?
31+
event.subj = message["subj"].to_json if message["subj"].present?
32+
event.obj = message["obj"].to_json if message["obj"].present?
33+
event.license = message["license"] if message["license"].present?
34+
35+
if message["subj_id"].present?
36+
event.subj_id = DoiUtilities.normalize_doi(message["subjId"]) || message["subjId"]
37+
end
38+
39+
if ["obj_id"].present?
40+
event.obj_id = DoiUtilities.normalize_doi(message["objId"]) || message["objId"]
41+
end
42+
end
2743
end
2844
end

app/models/event.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ class Event < ApplicationRecord
1414
attribute :callback, :text
1515
attribute :error_messages, :text
1616
attribute :source_token, :text
17-
attribute :created_at, :datetime
18-
attribute :updated_at, :datetime
1917
attribute :indexed_at, :datetime, default: -> { Time.zone.at(0) }
2018
attribute :occurred_at, :datetime
2119
attribute :message_action, :string, default: "create"
@@ -36,8 +34,6 @@ class Event < ApplicationRecord
3634
validates :source_id, presence: true
3735
validates :source_token, presence: true
3836
validates :message_action, presence: true, length: { maximum: 191 }
39-
validates :created_at, presence: true
40-
validates :updated_at, presence: true
4137
validates :indexed_at, presence: true
4238

4339
# Getters
@@ -50,7 +46,12 @@ def obj_hash
5046
end
5147

5248
# Callback Hooks
49+
50+
# We run some special logic in order to set the source and target doi
51+
# and their related relation type ids.
5352
before_validation :set_source_and_target_doi!
53+
54+
# After the event is persisted successfully to the database, we index the event in OpenSearch.
5455
after_commit -> { EventIndexJob.perform_later(self) }
5556

5657
# OpenSearch Mappings

app/workers/event_import_worker.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ def create_event(event_data, log_prefix, log_identifier)
7575
def update_event(event, event_data, log_prefix, log_identifier)
7676
Rails.logger.info("#{log_prefix} Update an existing event for #{log_identifier}")
7777

78-
if event.update(data)
78+
EventFactory.update_from_sqs(event, event_data)
79+
80+
if event.save
7981
Rails.logger.info("#{log_prefix} Event successfully updated for #{log_identifier}")
8082
else
8183
Rails.logger.error("#{log_prefix} Updating event failed for #{log_identifier}: #{event.errors.inspect}")

0 commit comments

Comments
 (0)