Browse Source

Feature/restructure portfolio report response (#5260)

* Restructure response of portfolio report endpoint

* Update changelog
pull/5240/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
4b03d5a926
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      CHANGELOG.md
  2. 6
      apps/api/src/app/portfolio/portfolio.controller.ts
  3. 13
      apps/api/src/app/portfolio/portfolio.service.ts
  4. 6
      apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts
  5. 2
      libs/common/src/lib/interfaces/responses/portfolio-report.interface.ts

4
CHANGELOG.md

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased ## Unreleased
### Changed
- Restructured the response of the portfolio report endpoint (_X-ray_)
### Fixed ### Fixed
- Excluded the holdings originated of `FEE`, `INTEREST` and `LIABILITY` activities from the closed holdings on the portfolio holdings page - Excluded the holdings originated of `FEE`, `INTEREST` and `LIABILITY` activities from the closed holdings on the portfolio holdings page

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

@ -655,11 +655,11 @@ export class PortfolioController {
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') &&
this.request.user.subscription.type === 'Basic' this.request.user.subscription.type === 'Basic'
) { ) {
for (const rule in report.rules) { for (const rule in report['x-ray'].rules) {
report.rules[rule] = null; report['x-ray'].rules[rule] = null;
} }
report.statistics = { report['x-ray'].statistics = {
rulesActiveCount: 0, rulesActiveCount: 0,
rulesFulfilledCount: 0 rulesFulfilledCount: 0
}; };

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

@ -1156,7 +1156,7 @@ export class PortfolioService {
}) })
).toNumber(); ).toNumber();
const rules: PortfolioReportResponse['rules'] = { const rules: PortfolioReportResponse['x-ray']['rules'] = {
accountClusterRisk: accountClusterRisk:
summary.activityCount > 0 summary.activityCount > 0
? await this.rulesService.evaluate( ? await this.rulesService.evaluate(
@ -1311,7 +1311,12 @@ export class PortfolioService {
: undefined : undefined
}; };
return { rules, statistics: this.getReportStatistics(rules) }; return {
'x-ray': {
rules,
statistics: this.getReportStatistics(rules)
}
};
} }
public async updateTags({ public async updateTags({
@ -1731,8 +1736,8 @@ export class PortfolioService {
} }
private getReportStatistics( private getReportStatistics(
evaluatedRules: PortfolioReportResponse['rules'] evaluatedRules: PortfolioReportResponse['x-ray']['rules']
): PortfolioReportResponse['statistics'] { ): PortfolioReportResponse['x-ray']['statistics'] {
const rulesActiveCount = Object.values(evaluatedRules) const rulesActiveCount = Object.values(evaluatedRules)
.flat() .flat()
.filter((rule) => { .filter((rule) => {

6
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.ts

@ -47,7 +47,7 @@ export class GfXRayPageComponent {
public inactiveRules: PortfolioReportRule[]; public inactiveRules: PortfolioReportRule[];
public isLoading = false; public isLoading = false;
public regionalMarketClusterRiskRules: PortfolioReportRule[]; public regionalMarketClusterRiskRules: PortfolioReportRule[];
public statistics: PortfolioReportResponse['statistics']; public statistics: PortfolioReportResponse['x-ray']['statistics'];
public user: User; public user: User;
private unsubscribeSubject = new Subject<void>(); private unsubscribeSubject = new Subject<void>();
@ -115,7 +115,7 @@ export class GfXRayPageComponent {
this.dataService this.dataService
.fetchPortfolioReport() .fetchPortfolioReport()
.pipe(takeUntil(this.unsubscribeSubject)) .pipe(takeUntil(this.unsubscribeSubject))
.subscribe(({ rules, statistics }) => { .subscribe(({ 'x-ray': { rules, statistics } }) => {
this.inactiveRules = this.mergeInactiveRules(rules); this.inactiveRules = this.mergeInactiveRules(rules);
this.statistics = statistics; this.statistics = statistics;
@ -161,7 +161,7 @@ export class GfXRayPageComponent {
} }
private mergeInactiveRules( private mergeInactiveRules(
rules: PortfolioReportResponse['rules'] rules: PortfolioReportResponse['x-ray']['rules']
): PortfolioReportRule[] { ): PortfolioReportRule[] {
let inactiveRules: PortfolioReportRule[] = []; let inactiveRules: PortfolioReportRule[] = [];

2
libs/common/src/lib/interfaces/responses/portfolio-report.interface.ts

@ -1,9 +1,11 @@
import { PortfolioReportRule } from '../portfolio-report-rule.interface'; import { PortfolioReportRule } from '../portfolio-report-rule.interface';
export interface PortfolioReportResponse { export interface PortfolioReportResponse {
'x-ray': {
rules: { [group: string]: PortfolioReportRule[] }; rules: { [group: string]: PortfolioReportRule[] };
statistics: { statistics: {
rulesActiveCount: number; rulesActiveCount: number;
rulesFulfilledCount: number; rulesFulfilledCount: number;
}; };
};
} }

Loading…
Cancel
Save