Browse Source

Merge branch 'main' into task/extend-account-endpoint-by-filters

pull/7748/head^2
Thomas Kaul 13 hours ago
committed by GitHub
parent
commit
540be46cc6
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      CHANGELOG.md
  2. 71
      apps/api/src/app/endpoints/public/public.service.ts
  3. 1
      apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts
  4. 4
      libs/common/src/lib/config.ts
  5. 5
      libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts

4
CHANGELOG.md

@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Extended the `GET api/v1/account` endpoint by the filters `accounts`, `assetClasses` and `tags`
### Fixed
- Fixed the redaction of `fee`, `quantity`, `value` and `valueInBaseCurrency` in the latest activities of the public page (experimental)
## 3.63.0 - 2026-08-28
### Added

71
apps/api/src/app/endpoints/public/public.service.ts

@ -81,25 +81,34 @@ export class PublicService {
})
]);
const { activities } = await this.activitiesService.getActivities({
filters,
sortColumn: 'date',
sortDirection: 'desc',
take: 10,
types: [ActivityType.BUY, ActivityType.SELL],
userCurrency: user?.settings?.settings.baseCurrency ?? DEFAULT_CURRENCY,
userId: user.id,
withExcludedAccountsAndActivities: false
});
// Experimental
const latestActivities = this.configurationService.get(
'ENABLE_FEATURE_SUBSCRIPTION'
)
? []
: activities.map(
({
assetProfile,
let latestActivities: PublicPortfolioResponse['latestActivities'] = [];
if (!this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
const { activities } = await this.activitiesService.getActivities({
filters,
sortColumn: 'date',
sortDirection: 'desc',
take: 10,
types: [ActivityType.BUY, ActivityType.SELL],
userCurrency: user?.settings?.settings.baseCurrency ?? DEFAULT_CURRENCY,
userId: user.id,
withExcludedAccountsAndActivities: false
});
latestActivities = activities.map(
({
assetProfile,
currency,
date,
fee,
quantity,
type,
unitPrice,
value,
valueInBaseCurrency
}) => {
return {
currency,
date,
fee,
@ -107,21 +116,17 @@ export class PublicService {
type,
unitPrice,
value,
valueInBaseCurrency
}) => {
return {
assetProfile,
currency,
date,
fee,
quantity,
type,
unitPrice,
value,
valueInBaseCurrency
};
}
);
valueInBaseCurrency,
assetProfile: {
currency: assetProfile.currency,
dataSource: assetProfile.dataSource,
name: assetProfile.name,
symbol: assetProfile.symbol
}
};
}
);
}
Object.values(markets ?? {}).forEach((market) => {
delete market.valueInBaseCurrency;

1
apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts

@ -89,6 +89,7 @@ export class TransformDataSourceInResponseInterceptor<
'holdings[*].assetProfile.dataSource',
'holdings[*].dataSource',
'items[*].dataSource',
'latestActivities[*].assetProfile.dataSource',
'settings["filters.dataSource"]',
'watchlist[*].dataSource'
]

4
libs/common/src/lib/config.ts

@ -157,6 +157,10 @@ export const DEFAULT_REDACTED_PATHS = [
'holdings[*].valueInBaseCurrency',
'interestInBaseCurrency',
'investmentInBaseCurrencyWithCurrencyEffect',
'latestActivities[*].fee',
'latestActivities[*].quantity',
'latestActivities[*].value',
'latestActivities[*].valueInBaseCurrency',
'netPerformance',
'netPerformanceWithCurrencyEffect',
'platforms[*].balance',

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

@ -24,7 +24,10 @@ export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 {
Order,
'currency' | 'date' | 'fee' | 'quantity' | 'type' | 'unitPrice'
> & {
assetProfile?: EnhancedAssetProfile;
assetProfile: Pick<
EnhancedAssetProfile,
'currency' | 'dataSource' | 'name' | 'symbol'
>;
value: number;
valueInBaseCurrency: number;
})[];

Loading…
Cancel
Save