mirror of
https://github.com/we-promise/sure.git
synced 2026-05-07 12:54:04 +00:00
* Add Sophtron Provider * fix syncer test issue * fix schema wrong merge * sync #588 * sync code for #588 * fixed a view issue * modified by comment * modified * modifed * modified * modified * fixed a schema issue * use global subtypes * add some locales * fix a safe_return_to_path * fix exposing raw exception messages issue * fix a merged issue * update schema.rb * fix a schema issue * fix some issue * Update bank sync controller to reflect beta status Signed-off-by: Juan José Mata <jjmata@jjmata.com> * Rename settings section title to 'Sophtron (alpha)' Signed-off-by: Juan José Mata <jjmata@jjmata.com> * Consistency in alpha/beta for Sophtron * Good PR suggestions from CodeRabbit --------- Signed-off-by: soky srm <sokysrm@gmail.com> Signed-off-by: Sophtron Rocky <rocky@sophtron.com> Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> Signed-off-by: Juan José Mata <jjmata@jjmata.com> Co-authored-by: soky srm <sokysrm@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com> Co-authored-by: Juan José Mata <jjmata@jjmata.com>
60 lines
1.6 KiB
Ruby
60 lines
1.6 KiB
Ruby
class Family::Syncer
|
|
attr_reader :family
|
|
|
|
# Registry of item association names that participate in family sync.
|
|
# Each model must:
|
|
# 1. Include Syncable
|
|
# 2. Define a `syncable` scope (items ready for auto-sync)
|
|
#
|
|
# To add a new provider: add its association name here.
|
|
# The model handles its own "ready to sync" logic via the syncable scope.
|
|
SYNCABLE_ITEM_ASSOCIATIONS = %i[
|
|
plaid_items
|
|
simplefin_items
|
|
lunchflow_items
|
|
enable_banking_items
|
|
indexa_capital_items
|
|
coinbase_items
|
|
coinstats_items
|
|
mercury_items
|
|
snaptrade_items
|
|
sophtron_items
|
|
].freeze
|
|
|
|
def initialize(family)
|
|
@family = family
|
|
end
|
|
|
|
def perform_sync(sync)
|
|
# We don't rely on this value to guard the app, but keep it eventually consistent
|
|
family.sync_trial_status!
|
|
|
|
# Schedule child syncs
|
|
child_syncables.each do |syncable|
|
|
syncable.sync_later(parent_sync: sync, window_start_date: sync.window_start_date, window_end_date: sync.window_end_date)
|
|
end
|
|
end
|
|
|
|
def perform_post_sync
|
|
family.auto_match_transfers!
|
|
|
|
Rails.logger.info("Applying rules for family #{family.id}")
|
|
family.rules.where(active: true).each do |rule|
|
|
rule.apply_later
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
# Collects all syncable items from registered providers + manual accounts.
|
|
# Each provider model defines its own `syncable` scope that encapsulates
|
|
# the "ready to sync" business logic (active, configured, etc.)
|
|
def child_syncables
|
|
provider_items = SYNCABLE_ITEM_ASSOCIATIONS.flat_map do |association|
|
|
family.public_send(association).syncable
|
|
end
|
|
|
|
provider_items + family.accounts.manual
|
|
end
|
|
end
|