From 20af43ddc4926d5873b975ca8997d5c777deecdb Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 9 Mar 2024 17:17:12 +0100 Subject: [PATCH] Optimize details endpoint --- .../src/app/portfolio/portfolio.controller.ts | 3 +- .../src/app/portfolio/portfolio.service.ts | 36 +++++++++++-------- .../interfaces/portfolio-details.interface.ts | 4 +-- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 63e26e512..514858031 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -108,7 +108,8 @@ export class PortfolioController { dateRange, filters, impersonationId, - userId: this.request.user.id + userId: this.request.user.id, + withSummary: true }); if (hasErrors || hasNotDefinedValuesInObject(holdings)) { diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index f03e6ec84..fde07354d 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -332,13 +332,15 @@ export class PortfolioService { filters, impersonationId, userId, - withExcludedAccounts = false + withExcludedAccounts = false, + withSummary = false }: { dateRange?: DateRange; filters?: Filter[]; impersonationId: string; userId: string; withExcludedAccounts?: boolean; + withSummary?: boolean; }): Promise { userId = await this.getUserId(impersonationId, userId); const user = await this.userService.user({ id: userId }); @@ -625,17 +627,21 @@ export class PortfolioService { }; } - const summary = await this.getSummary({ - holdings, - impersonationId, - userCurrency, - userId, - balanceInBaseCurrency: cashDetails.balanceInBaseCurrency, - emergencyFundPositionsValueInBaseCurrency: - this.getEmergencyFundPositionsValueInBaseCurrency({ - holdings - }) - }); + let summary: PortfolioSummary; + + if (withSummary) { + summary = await this.getSummary({ + holdings, + impersonationId, + userCurrency, + userId, + balanceInBaseCurrency: cashDetails.balanceInBaseCurrency, + emergencyFundPositionsValueInBaseCurrency: + this.getEmergencyFundPositionsValueInBaseCurrency({ + holdings + }) + }); + } return { accounts, @@ -643,11 +649,11 @@ export class PortfolioService { platforms, summary, filteredValueInBaseCurrency: filteredValueInBaseCurrency.toNumber(), - filteredValueInPercentage: summary.netWorth + filteredValueInPercentage: summary?.netWorth ? filteredValueInBaseCurrency.div(summary.netWorth).toNumber() - : 0, + : undefined, hasErrors: currentPositions.hasErrors, - totalValueInBaseCurrency: summary.netWorth + totalValueInBaseCurrency: summary?.netWorth }; } diff --git a/libs/common/src/lib/interfaces/portfolio-details.interface.ts b/libs/common/src/lib/interfaces/portfolio-details.interface.ts index 565c17c7d..35a9cf6f8 100644 --- a/libs/common/src/lib/interfaces/portfolio-details.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-details.interface.ts @@ -14,7 +14,7 @@ export interface PortfolioDetails { }; }; filteredValueInBaseCurrency?: number; - filteredValueInPercentage: number; + filteredValueInPercentage?: number; holdings: { [symbol: string]: PortfolioPosition }; platforms: { [id: string]: { @@ -25,6 +25,6 @@ export interface PortfolioDetails { valueInPercentage?: number; }; }; - summary: PortfolioSummary; + summary?: PortfolioSummary; totalValueInBaseCurrency?: number; }