1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-19 05:09:38 +02:00
Maybe/app/models/security.rb

54 lines
1.3 KiB
Ruby
Raw Normal View History

class Security < ApplicationRecord
include Providable
2025-02-28 09:34:14 -05:00
before_save :upcase_ticker
has_many :trades, dependent: :nullify, class_name: "Account::Trade"
has_many :prices, dependent: :destroy
validates :ticker, presence: true
validates :ticker, uniqueness: { scope: :exchange_operating_mic, case_sensitive: false }
class << self
2025-02-28 09:34:14 -05:00
def provider
security_prices_provider
end
def search(query)
security_prices_provider.search_securities(
query: query[:search],
dataset: "limited",
country_code: query[:country],
exchange_operating_mic: query[:exchange_operating_mic]
).securities.map { |attrs| new(**attrs) }
end
end
def current_price
@current_price ||= Security::Price.find_price(security: self, date: Date.current)
return nil if @current_price.nil?
Money.new(@current_price.price, @current_price.currency)
end
def to_combobox_option
SynthComboboxOption.new(
symbol: ticker,
name: name,
logo_url: logo_url,
exchange_acronym: exchange_acronym,
exchange_operating_mic: exchange_operating_mic,
exchange_country_code: country_code
)
end
def has_prices?
exchange_operating_mic.present?
end
private
def upcase_ticker
self.ticker = ticker.upcase
end
end