Feature/reuse markets calculation in public portfolio endpoint (#3882)

* Reuse markets calculation in public portfolio endpoint

* Update changelog
pull/3883/head^2
Thomas Kaul 2 weeks ago committed by GitHub
parent 8cbefbc1f4
commit b50a1fc63d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Optimized the portfolio calculations by reusing date intervals
- Refactored the calculation of the allocations by market on the public page
### Fixed

@ -57,7 +57,7 @@ export class PublicController {
}
const [
{ holdings },
{ holdings, markets },
{ performance: performance1d },
{ performance: performanceMax },
{ performance: performanceYtd }
@ -76,8 +76,13 @@ export class PublicController {
})
]);
Object.values(markets).forEach((market) => {
delete market.valueInBaseCurrency;
});
const publicPortfolioResponse: PublicPortfolioResponse = {
hasDetails,
markets,
alias: access.alias,
holdings: {},
performance: {

@ -32,7 +32,7 @@ export class PublicPageComponent implements OnInit {
public deviceType: string;
public holdings: PublicPortfolioResponse['holdings'][string][];
public markets: {
[key in Market]: { name: string; value: number };
[key in Market]: { id: Market; valueInPercentage: number };
};
public positions: {
[symbol: string]: Pick<PortfolioPosition, 'currency' | 'name'> & {
@ -102,24 +102,7 @@ export class PublicPageComponent implements OnInit {
}
};
this.holdings = [];
this.markets = {
[UNKNOWN_KEY]: {
name: UNKNOWN_KEY,
value: 0
},
developedMarkets: {
name: 'developedMarkets',
value: 0
},
emergingMarkets: {
name: 'emergingMarkets',
value: 0
},
otherMarkets: {
name: 'otherMarkets',
value: 0
}
};
this.markets = this.publicPortfolioDetails.markets;
this.positions = {};
this.sectors = {
[UNKNOWN_KEY]: {
@ -150,13 +133,6 @@ export class PublicPageComponent implements OnInit {
// Prepare analysis data by continents, countries, holdings and sectors except for liquidity
if (position.countries.length > 0) {
this.markets.developedMarkets.value +=
position.markets.developedMarkets * position.valueInBaseCurrency;
this.markets.emergingMarkets.value +=
position.markets.emergingMarkets * position.valueInBaseCurrency;
this.markets.otherMarkets.value +=
position.markets.otherMarkets * position.valueInBaseCurrency;
for (const country of position.countries) {
const { code, continent, name, weight } = country;
@ -192,9 +168,6 @@ export class PublicPageComponent implements OnInit {
this.countries[UNKNOWN_KEY].value +=
this.publicPortfolioDetails.holdings[symbol].valueInBaseCurrency;
this.markets[UNKNOWN_KEY].value +=
this.publicPortfolioDetails.holdings[symbol].valueInBaseCurrency;
}
if (position.sectors.length > 0) {
@ -227,21 +200,6 @@ export class PublicPageComponent implements OnInit {
: position.valueInPercentage
};
}
const marketsTotal =
this.markets.developedMarkets.value +
this.markets.emergingMarkets.value +
this.markets.otherMarkets.value +
this.markets[UNKNOWN_KEY].value;
this.markets.developedMarkets.value =
this.markets.developedMarkets.value / marketsTotal;
this.markets.emergingMarkets.value =
this.markets.emergingMarkets.value / marketsTotal;
this.markets.otherMarkets.value =
this.markets.otherMarkets.value / marketsTotal;
this.markets[UNKNOWN_KEY].value =
this.markets[UNKNOWN_KEY].value / marketsTotal;
}
public ngOnDestroy() {

@ -156,7 +156,7 @@
i18n
size="large"
[isPercent]="true"
[value]="markets?.developedMarkets?.value"
[value]="markets?.developedMarkets?.valueInPercentage"
>Developed Markets</gf-value
>
</div>
@ -165,7 +165,7 @@
i18n
size="large"
[isPercent]="true"
[value]="markets?.emergingMarkets?.value"
[value]="markets?.emergingMarkets?.valueInPercentage"
>Emerging Markets</gf-value
>
</div>
@ -174,17 +174,17 @@
i18n
size="large"
[isPercent]="true"
[value]="markets?.otherMarkets?.value"
[value]="markets?.otherMarkets?.valueInPercentage"
>Other Markets</gf-value
>
</div>
@if (markets?.[UNKNOWN_KEY]?.value > 0) {
@if (markets?.[UNKNOWN_KEY]?.valueInPercentage > 0) {
<div class="col-xs-12 col-md my-2">
<gf-value
i18n
size="large"
[isPercent]="true"
[value]="markets?.[UNKNOWN_KEY]?.value"
[value]="markets?.[UNKNOWN_KEY]?.valueInPercentage"
>No data available</gf-value
>
</div>

@ -1,4 +1,5 @@
import { PortfolioPosition } from '../portfolio-position.interface';
import { PortfolioDetails, PortfolioPosition } from '..';
import { Market } from '../../types';
export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 {
alias?: string;
@ -22,6 +23,12 @@ export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 {
| 'valueInPercentage'
>;
};
markets: {
[key in Market]: Pick<
PortfolioDetails['markets'][key],
'id' | 'valueInPercentage'
>;
};
}
interface PublicPortfolioResponseV1 {

Loading…
Cancel
Save