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

Enhance HoldingCalculator with Logging and Error Handling

This commit is contained in:
Josh Pigford 2025-02-03 19:54:32 -06:00
parent 983729cbdf
commit 50e5ffb257

View file

@ -46,11 +46,22 @@ class Account::HoldingCalculator
end
def generate_holding_records(portfolio, date)
Rails.logger.info "[HoldingCalculator] Generating holdings for #{portfolio.size} securities on #{date}"
portfolio.map do |security_id, qty|
security = securities_cache[security_id]
if security.blank?
Rails.logger.error "[HoldingCalculator] Security #{security_id} not found in cache for account #{account.id}"
next
end
price = security.dig(:prices)&.find { |p| p.date == date }
next if price.blank?
if price.blank?
Rails.logger.info "[HoldingCalculator] No price found for security #{security_id} on #{date}"
next
end
converted_price = Money.new(price.price, price.currency).exchange_to(account.currency, fallback_rate: 1).amount
@ -107,14 +118,19 @@ class Account::HoldingCalculator
def preload_securities
securities = trades.map(&:entryable).map(&:security).uniq
Rails.logger.info "[HoldingCalculator] Preloading #{securities.size} securities for account #{account.id}"
securities.each do |security|
Rails.logger.info "[HoldingCalculator] Loading prices for security #{security.id} (#{security.symbol})"
prices = Security::Price.find_prices(
security: security,
start_date: portfolio_start_date,
end_date: Date.current
)
Rails.logger.info "[HoldingCalculator] Found #{prices.size} prices for security #{security.id}"
@securities_cache[security.id] = {
security: security,
prices: prices