1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-24 15:49:39 +02:00

Groundwork for security info (#1396)
Some checks are pending
Publish Docker image / ci (push) Waiting to run
Publish Docker image / Build docker image (push) Blocked by required conditions

* Groundwork for security info

* Lint
This commit is contained in:
Josh Pigford 2024-10-30 18:08:19 -04:00 committed by GitHub
parent 5e2b932648
commit e7f09e6f71
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 44 additions and 1 deletions

View file

@ -0,0 +1,20 @@
class FetchSecurityInfoJob < ApplicationJob
queue_as :default
def perform(security_id)
return unless Security.security_info_provider.present?
security = Security.find(security_id)
security_info_response = Security.security_info_provider.fetch_security_info(
ticker: security.ticker,
mic_code: security.exchange_mic
)
security.update(
name: security_info_response.info.dig("name"),
exchange_acronym: security_info_response.info.dig("exchange", "acronym"),
country_code: security_info_response.info.dig("exchange", "country_code")
)
end
end

View file

@ -33,7 +33,11 @@ class Account::TradeBuilder < Account::EntryBuilder
def security
ticker_symbol, exchange_mic = ticker.split("|")
Security.find_or_create_by(ticker: ticker_symbol, exchange_mic: exchange_mic)
security = Security.find_or_create_by(ticker: ticker_symbol, exchange_mic: exchange_mic)
FetchSecurityInfoJob.perform_later(security.id)
security
end
def amount

View file

@ -10,6 +10,10 @@ module Providable
synth_provider
end
def security_info_provider
synth_provider
end
def exchange_rates_provider
synth_provider
end

View file

@ -9,6 +9,7 @@ class Provider::Synth
response = client.get("#{base_url}/user")
JSON.parse(response.body).dig("id").present?
end
def usage
response = client.get("#{base_url}/user")
@ -147,6 +148,19 @@ class Provider::Synth
raw_response: response
end
def fetch_security_info(ticker:, mic_code:)
response = client.get("#{base_url}/tickers/#{ticker}") do |req|
req.params["mic_code"] = mic_code
end
parsed = JSON.parse(response.body)
SecurityInfoResponse.new \
info: parsed.dig("data"),
success?: true,
raw_response: response
end
private
attr_reader :api_key
@ -156,6 +170,7 @@ class Provider::Synth
ExchangeRatesResponse = Struct.new :rates, :success?, :error, :raw_response, keyword_init: true
UsageResponse = Struct.new :used, :limit, :utilization, :plan, :success?, :error, :raw_response, keyword_init: true
SearchSecuritiesResponse = Struct.new :securities, :success?, :error, :raw_response, keyword_init: true
SecurityInfoResponse = Struct.new :info, :success?, :error, :raw_response, keyword_init: true
def base_url
"https://api.synthfinance.com"