From 2bfd92cb9cb3599b3c37a26dbac3dfc5bf73b340 Mon Sep 17 00:00:00 2001 From: KenTandrian Date: Sun, 26 Oct 2025 13:04:48 +0700 Subject: [PATCH] feat(api): add synthetic activities into calculator --- .../src/app/portfolio/portfolio.service.ts | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 53efc34a3..081575001 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -575,6 +575,7 @@ export class PortfolioService { (user.settings?.settings as UserSettings)?.emergencyFund ?? 0 ); + // Activities for non-cash assets const { activities } = await this.orderService.getOrdersForPortfolioCalculator({ filters, @@ -582,23 +583,29 @@ export class PortfolioService { userId }); - const portfolioCalculator = this.calculatorFactory.createCalculator({ - activities, + // Synthetic activities for cash + const cashDetails = await this.accountService.getCashDetails({ filters, userId, - calculationType: this.getUserPerformanceCalculationType(user), currency: userCurrency }); + const cashActivities = await this.getCashActivities({ + cashDetails, + userCurrency, + userId + }); - const { createdAt, currentValueInBaseCurrency, hasErrors, positions } = - await portfolioCalculator.getSnapshot(); - - const cashDetails = await this.accountService.getCashDetails({ + const portfolioCalculator = this.calculatorFactory.createCalculator({ filters, userId, + activities: [...activities, ...cashActivities], + calculationType: this.getUserPerformanceCalculationType(user), currency: userCurrency }); + const { createdAt, currentValueInBaseCurrency, hasErrors, positions } = + await portfolioCalculator.getSnapshot(); + const holdings: PortfolioDetails['holdings'] = {}; const totalValueInBaseCurrency = currentValueInBaseCurrency.plus(