Browse Source

fix: resolve portfolio calculator fallback bug by gap-filling missing end date market prices

pull/7925/head
Suraj 1 week ago
parent
commit
7c39ed2a63
  1. 28
      apps/api/src/app/portfolio/calculator/portfolio-calculator.ts

28
apps/api/src/app/portfolio/calculator/portfolio-calculator.ts

@ -325,6 +325,10 @@ export abstract class PortfolioCalculator {
[date: string]: { [assetProfileIdentifier: string]: Big }; [date: string]: { [assetProfileIdentifier: string]: Big };
} = {}; } = {};
const latestMarketPriceMap: {
[assetProfileIdentifier: string]: { date: string; price: Big };
} = {};
for (const marketSymbol of marketSymbols) { for (const marketSymbol of marketSymbols) {
const date = format(marketSymbol.date, DATE_FORMAT); const date = format(marketSymbol.date, DATE_FORMAT);
@ -333,13 +337,33 @@ export abstract class PortfolioCalculator {
} }
if (marketSymbol.marketPrice) { if (marketSymbol.marketPrice) {
marketSymbolMap[date][getAssetProfileIdentifier(marketSymbol)] = const identifier = getAssetProfileIdentifier(marketSymbol);
new Big(marketSymbol.marketPrice); const price = new Big(marketSymbol.marketPrice);
marketSymbolMap[date][identifier] = price;
if (
!latestMarketPriceMap[identifier] ||
latestMarketPriceMap[identifier].date < date
) {
latestMarketPriceMap[identifier] = { date, price };
}
} }
} }
const endDateString = format(this.endDate, DATE_FORMAT); const endDateString = format(this.endDate, DATE_FORMAT);
if (!marketSymbolMap[endDateString]) {
marketSymbolMap[endDateString] = {};
}
for (const identifier of Object.keys(latestMarketPriceMap)) {
if (!marketSymbolMap[endDateString][identifier]) {
marketSymbolMap[endDateString][identifier] =
latestMarketPriceMap[identifier].price;
}
}
const daysInMarket = differenceInDays(this.endDate, this.startDate); const daysInMarket = differenceInDays(this.endDate, this.startDate);
const chartDateMap = this.getChartDateMap({ const chartDateMap = this.getChartDateMap({

Loading…
Cancel
Save