From e641cfccd47ab64d7d4b21415d8a8dc5138232e5 Mon Sep 17 00:00:00 2001 From: Zach Gollwitzer Date: Wed, 20 Nov 2024 11:01:52 -0500 Subject: [PATCH] Add post-sync hook (#1479) --- app/models/concerns/syncable.rb | 4 ++++ app/models/family.rb | 4 ++++ app/models/plaid_item.rb | 4 ++++ app/models/sync.rb | 23 +++++++++-------------- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/app/models/concerns/syncable.rb b/app/models/concerns/syncable.rb index ec6abb2e..042eb6b1 100644 --- a/app/models/concerns/syncable.rb +++ b/app/models/concerns/syncable.rb @@ -22,6 +22,10 @@ module Syncable raise NotImplementedError, "Subclasses must implement the `sync_data` method" end + def post_sync + # no-op, syncable can optionally provide implementation + end + def sync_error latest_sync.error end diff --git a/app/models/family.rb b/app/models/family.rb index 0e9226f8..673df231 100644 --- a/app/models/family.rb +++ b/app/models/family.rb @@ -32,6 +32,10 @@ class Family < ApplicationRecord end end + def post_sync + broadcast_refresh + end + def syncing? super || accounts.manual.any?(&:syncing?) || plaid_items.any?(&:syncing?) end diff --git a/app/models/plaid_item.rb b/app/models/plaid_item.rb index d456285e..5492edaf 100644 --- a/app/models/plaid_item.rb +++ b/app/models/plaid_item.rb @@ -42,6 +42,10 @@ class PlaidItem < ApplicationRecord end end + def post_sync + family.broadcast_refresh + end + def destroy_later update!(scheduled_for_deletion: true) DestroyJob.perform_later(self) diff --git a/app/models/sync.rb b/app/models/sync.rb index c0a8b53c..84e078da 100644 --- a/app/models/sync.rb +++ b/app/models/sync.rb @@ -8,32 +8,27 @@ class Sync < ApplicationRecord def perform start! - syncable.sync_data(start_date: start_date) - - complete! - rescue StandardError => error - fail! error - raise error if Rails.env.development? + begin + syncable.sync_data(start_date: start_date) + complete! + rescue StandardError => error + fail! error + raise error if Rails.env.development? + ensure + syncable.post_sync + end end private - def family - syncable.is_a?(Family) ? syncable : syncable.family - end - def start! update! status: :syncing end def complete! update! status: :completed, last_ran_at: Time.current - - family.broadcast_refresh end def fail!(error) update! status: :failed, error: error.message, last_ran_at: Time.current - - family.broadcast_refresh end end