mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 05:09:38 +02:00
* PlaidConnectable concern * Remove bad abstraction * Put sync implementations in own concerns * Sync strategies * Move sync orchestration to Sync class * Clean up sync class, add state machine * Basic market data sync cron * Fix price sync * Improve sync window column names, add timestamps * 30 day syncs by default * Clean up market data methods * Report high duplicate sync counts to Sentry * Add sync states throughout app * account tab session * Persistent account tab selections * Remove manual sleep * Add migration to clear stale syncs on self hosted apps * Tweak sync states * Sync completion event broadcasts * Fix timezones in tests * Cleanup * More cleanup * Plaid item UI broadcasts for sync * Fix account ID namespace conflict * Sync broadcasters * Smoother account sync refreshes * Remove test sync delay
51 lines
1.2 KiB
Ruby
51 lines
1.2 KiB
Ruby
module Family::PlaidConnectable
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
has_many :plaid_items, dependent: :destroy
|
|
end
|
|
|
|
def create_plaid_item!(public_token:, item_name:, region:)
|
|
provider = plaid_provider_for_region(region)
|
|
|
|
public_token_response = provider.exchange_public_token(public_token)
|
|
|
|
plaid_item = plaid_items.create!(
|
|
name: item_name,
|
|
plaid_id: public_token_response.item_id,
|
|
access_token: public_token_response.access_token,
|
|
plaid_region: region
|
|
)
|
|
|
|
plaid_item.sync_later
|
|
|
|
plaid_item
|
|
end
|
|
|
|
def get_link_token(webhooks_url:, redirect_url:, accountable_type: nil, region: :us, access_token: nil)
|
|
return nil unless plaid_us || plaid_eu
|
|
|
|
provider = plaid_provider_for_region(region)
|
|
|
|
provider.get_link_token(
|
|
user_id: self.id,
|
|
webhooks_url: webhooks_url,
|
|
redirect_url: redirect_url,
|
|
accountable_type: accountable_type,
|
|
access_token: access_token
|
|
).link_token
|
|
end
|
|
|
|
private
|
|
def plaid_us
|
|
@plaid ||= Provider::Registry.get_provider(:plaid_us)
|
|
end
|
|
|
|
def plaid_eu
|
|
@plaid_eu ||= Provider::Registry.get_provider(:plaid_eu)
|
|
end
|
|
|
|
def plaid_provider_for_region(region)
|
|
region.to_sym == :eu ? plaid_eu : plaid_us
|
|
end
|
|
end
|