Browse Source

Optimize details endpoint

pull/3123/head
Thomas Kaul 1 year ago
parent
commit
20af43ddc4
  1. 3
      apps/api/src/app/portfolio/portfolio.controller.ts
  2. 36
      apps/api/src/app/portfolio/portfolio.service.ts
  3. 4
      libs/common/src/lib/interfaces/portfolio-details.interface.ts

3
apps/api/src/app/portfolio/portfolio.controller.ts

@ -108,7 +108,8 @@ export class PortfolioController {
dateRange, dateRange,
filters, filters,
impersonationId, impersonationId,
userId: this.request.user.id userId: this.request.user.id,
withSummary: true
}); });
if (hasErrors || hasNotDefinedValuesInObject(holdings)) { if (hasErrors || hasNotDefinedValuesInObject(holdings)) {

36
apps/api/src/app/portfolio/portfolio.service.ts

@ -332,13 +332,15 @@ export class PortfolioService {
filters, filters,
impersonationId, impersonationId,
userId, userId,
withExcludedAccounts = false withExcludedAccounts = false,
withSummary = false
}: { }: {
dateRange?: DateRange; dateRange?: DateRange;
filters?: Filter[]; filters?: Filter[];
impersonationId: string; impersonationId: string;
userId: string; userId: string;
withExcludedAccounts?: boolean; withExcludedAccounts?: boolean;
withSummary?: boolean;
}): Promise<PortfolioDetails & { hasErrors: boolean }> { }): Promise<PortfolioDetails & { hasErrors: boolean }> {
userId = await this.getUserId(impersonationId, userId); userId = await this.getUserId(impersonationId, userId);
const user = await this.userService.user({ id: userId }); const user = await this.userService.user({ id: userId });
@ -625,17 +627,21 @@ export class PortfolioService {
}; };
} }
const summary = await this.getSummary({ let summary: PortfolioSummary;
holdings,
impersonationId, if (withSummary) {
userCurrency, summary = await this.getSummary({
userId, holdings,
balanceInBaseCurrency: cashDetails.balanceInBaseCurrency, impersonationId,
emergencyFundPositionsValueInBaseCurrency: userCurrency,
this.getEmergencyFundPositionsValueInBaseCurrency({ userId,
holdings balanceInBaseCurrency: cashDetails.balanceInBaseCurrency,
}) emergencyFundPositionsValueInBaseCurrency:
}); this.getEmergencyFundPositionsValueInBaseCurrency({
holdings
})
});
}
return { return {
accounts, accounts,
@ -643,11 +649,11 @@ export class PortfolioService {
platforms, platforms,
summary, summary,
filteredValueInBaseCurrency: filteredValueInBaseCurrency.toNumber(), filteredValueInBaseCurrency: filteredValueInBaseCurrency.toNumber(),
filteredValueInPercentage: summary.netWorth filteredValueInPercentage: summary?.netWorth
? filteredValueInBaseCurrency.div(summary.netWorth).toNumber() ? filteredValueInBaseCurrency.div(summary.netWorth).toNumber()
: 0, : undefined,
hasErrors: currentPositions.hasErrors, hasErrors: currentPositions.hasErrors,
totalValueInBaseCurrency: summary.netWorth totalValueInBaseCurrency: summary?.netWorth
}; };
} }

4
libs/common/src/lib/interfaces/portfolio-details.interface.ts

@ -14,7 +14,7 @@ export interface PortfolioDetails {
}; };
}; };
filteredValueInBaseCurrency?: number; filteredValueInBaseCurrency?: number;
filteredValueInPercentage: number; filteredValueInPercentage?: number;
holdings: { [symbol: string]: PortfolioPosition }; holdings: { [symbol: string]: PortfolioPosition };
platforms: { platforms: {
[id: string]: { [id: string]: {
@ -25,6 +25,6 @@ export interface PortfolioDetails {
valueInPercentage?: number; valueInPercentage?: number;
}; };
}; };
summary: PortfolioSummary; summary?: PortfolioSummary;
totalValueInBaseCurrency?: number; totalValueInBaseCurrency?: number;
} }

Loading…
Cancel
Save