Browse Source

Feature/extend public portfolio page with latest activities

pull/5538/head
David Requeno 1 month ago
parent
commit
bc0df043c5
  1. 14
      apps/api/src/app/endpoints/public/public.controller.ts
  2. 8
      apps/client/src/app/pages/public/public-page.component.ts
  3. 2
      apps/client/src/app/pages/public/public-page.html
  4. 4
      libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts

14
apps/api/src/app/endpoints/public/public.controller.ts

@ -12,6 +12,7 @@ import {
UseInterceptors
} from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { Type as ActivityType } from '@prisma/client';
import { Big } from 'big.js';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
@ -81,27 +82,20 @@ export class PublicController {
})
]);
const latestActivitiesPromise = this.orderService.getOrders({
const { activities } = await this.orderService.getOrders({
includeDrafts: false,
sortColumn: 'date',
sortDirection: 'desc',
take: 10,
userCurrency: user.settings?.settings.baseCurrency ?? DEFAULT_CURRENCY,
userId: user.id,
types: [ActivityType.BUY, ActivityType.SELL],
withExcludedAccountsAndActivities: false
});
const { activities } = await latestActivitiesPromise;
const latestActivities = activities.map((a) => ({
account: a.account
? {
currency: a.account.currency,
name: a.account.name,
platform: a.account.platform
}
: undefined,
currency: a.currency,
date: a.date,
fee: a.fee,
quantity: a.quantity,
SymbolProfile: a.SymbolProfile,
type: a.type,

8
apps/client/src/app/pages/public/public-page.component.ts

@ -1,4 +1,3 @@
import type { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { UNKNOWN_KEY } from '@ghostfolio/common/config';
import { prettifySymbol } from '@ghostfolio/common/helper';
import {
@ -59,7 +58,9 @@ export class GfPublicPageComponent implements OnInit {
public defaultAlias = $localize`someone`;
public deviceType: string;
public holdings: PublicPortfolioResponse['holdings'][string][];
public latestActivitiesDataSource: MatTableDataSource<Activity>;
public latestActivitiesDataSource: MatTableDataSource<
PublicPortfolioResponse['latestActivities'][0]
>;
public markets: {
[key in Market]: { id: Market; valueInPercentage: number };
};
@ -113,8 +114,7 @@ export class GfPublicPageComponent implements OnInit {
this.publicPortfolioDetails = portfolioPublicDetails;
this.latestActivitiesDataSource = new MatTableDataSource(
(this.publicPortfolioDetails.latestActivities ||
[]) as unknown as Activity[]
this.publicPortfolioDetails.latestActivities
);
this.initializeAnalysisData();

2
apps/client/src/app/pages/public/public-page.html

@ -220,7 +220,9 @@
[hasPermissionToExportActivities]="false"
[hasPermissionToOpenDetails]="false"
[pageSize]="maxSafeInteger"
[showAccountColumn]="false"
[showActions]="false"
[sortDisabled]="true"
/>
</mat-card-content>
</mat-card>

4
libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts

@ -2,7 +2,6 @@ import type { Order } from '@prisma/client';
import { EnhancedSymbolProfile, PortfolioDetails, PortfolioPosition } from '..';
import { Market } from '../../types';
import type { AccountWithPlatform } from '../../types';
export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 {
alias?: string;
@ -28,9 +27,8 @@ export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 {
};
latestActivities: (Pick<
Order,
'currency' | 'date' | 'quantity' | 'type' | 'unitPrice'
'currency' | 'date' | 'fee' | 'quantity' | 'type' | 'unitPrice'
> & {
account?: Pick<AccountWithPlatform, 'currency' | 'name' | 'platform'>;
SymbolProfile?: EnhancedSymbolProfile;
value: number;
valueInBaseCurrency: number;

Loading…
Cancel
Save