Files
sure/app/models/family/snaptrade_connectable.rb
LPW a83f70425f Add SnapTrade brokerage integration with full trade history support (#737)
* Introduce SnapTrade integration with models, migrations, views, and activity processing logic.

* Refactor SnapTrade activities processing: improve activity fetching flow, handle pending states, and update UI elements for enhanced user feedback.

* Update Brakeman ignore file to include intentional redirect for SnapTrade OAuth portal.

* Refactor SnapTrade models, views, and processing logic: add currency extraction helper, improve pending state handling, optimize migration checks, and enhance user feedback in UI.

* Remove encryption for SnapTrade `snaptrade_user_id`, as it is an identifier, not a secret.

* Introduce `SnaptradeConnectionCleanupJob` to asynchronously handle SnapTrade connection cleanup and improve i18n for SnapTrade item status messages.

* Update SnapTrade encryption: make `snaptrade_user_secret` non-deterministic to enhance security.

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: luckyPipewrench <luckypipewrench@proton.me>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-22 20:52:49 +01:00

31 lines
780 B
Ruby

module Family::SnaptradeConnectable
extend ActiveSupport::Concern
included do
has_many :snaptrade_items, dependent: :destroy
end
def can_connect_snaptrade?
# Families can configure their own Snaptrade credentials
true
end
def create_snaptrade_item!(client_id:, consumer_key:, snaptrade_user_secret:, snaptrade_user_id: nil, item_name: nil)
snaptrade_item = snaptrade_items.create!(
name: item_name || "Snaptrade Connection",
client_id: client_id,
consumer_key: consumer_key,
snaptrade_user_id: snaptrade_user_id,
snaptrade_user_secret: snaptrade_user_secret
)
snaptrade_item.sync_later
snaptrade_item
end
def has_snaptrade_credentials?
snaptrade_items.where.not(client_id: nil).exists?
end
end