@@ -22,36 +22,37 @@ def start_batch
2222 def log_success ( member , invitation = nil )
2323 return unless @log
2424
25- @log . entries . create! (
26- member : member ,
27- invitation : invitation ,
28- status : :success ,
29- processed_at : Time . current
30- ) . tap { @log . increment! ( :success_count ) }
25+ entry = find_or_build_entry ( member , invitation , :success )
26+ return entry if entry . persisted?
27+
28+ entry . assign_attributes ( processed_at : Time . current )
29+ save_entry ( entry , :success_count )
3130 end
3231
3332 def log_failure ( member , invitation , error )
3433 return unless @log
3534
36- @log . entries . create! (
37- member : member ,
38- invitation : invitation ,
39- status : :failed ,
35+ entry = find_or_build_entry ( member , invitation , :failed )
36+ return entry if entry . persisted?
37+
38+ entry . assign_attributes (
4039 failure_reason : error . message ,
4140 processed_at : Time . current
42- ) . tap { @log . increment! ( :failure_count ) }
41+ )
42+ save_entry ( entry , :failure_count )
4343 end
4444
4545 def log_skipped ( member , invitation , reason )
4646 return unless @log
4747
48- @log . entries . create! (
49- member : member ,
50- invitation : invitation ,
51- status : :skipped ,
48+ entry = find_or_build_entry ( member , invitation , :skipped )
49+ return entry if entry . persisted?
50+
51+ entry . assign_attributes (
5252 failure_reason : reason ,
5353 processed_at : Time . current
54- ) . tap { @log . increment! ( :skipped_count ) }
54+ )
55+ save_entry ( entry , :skipped_count )
5556 end
5657
5758 def finish_batch ( total_invitees )
@@ -74,5 +75,21 @@ def fail_batch(error)
7475 )
7576 end
7677
78+ private
79+
80+ def find_or_build_entry ( member , invitation , status )
81+ @log . entries . find_or_initialize_by (
82+ member :,
83+ invitation :,
84+ status :
85+ )
86+ end
87+
88+ def save_entry ( entry , counter )
89+ entry . save!
90+ @log . increment! ( counter )
91+ entry
92+ end
93+
7794 attr_reader :log
7895end
0 commit comments