Browse Source

Merge branch 'main' into task/refactor-rounding-logic-in-holding-detail-dialog

pull/7199/head
Thomas Kaul 2 months ago
committed by GitHub
parent
commit
c01b885c60
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      CHANGELOG.md
  2. 9
      apps/api/src/app/admin/admin.controller.ts
  3. 9
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
  4. 3
      apps/api/src/app/import/import.service.ts
  5. 25
      libs/ui/src/lib/treemap-chart/treemap-chart.component.ts

3
CHANGELOG.md

@ -10,8 +10,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Refactored the rounding logic in the holding detail dialog
- Refactored the rounding logic in the treemap chart component
- Restricted the modification of activity tags in the impersonation mode
- Hardened the endpoint of the public access for portfolio sharing by restricting it to public accesses
- Improved the parsing of integer query parameters (`skip` and `take`) in the `GET api/v1/admin/user` endpoint
- Improved the parsing of integer query parameters (`skip` and `take`) in the `GET api/v1/asset-profiles` endpoint
- Improved the language localization by translating various tooltips across the application
- Improved the language localization for Ukrainian (`uk`)
- Upgraded `yahoo-finance2` from version `3.14.3` to `3.15.4`

9
apps/api/src/app/admin/admin.controller.ts

@ -40,6 +40,7 @@ import {
Inject,
Logger,
Param,
ParseIntPipe,
Patch,
Post,
Put,
@ -319,12 +320,12 @@ export class AdminController {
@HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getUsers(
@Query('skip') skip?: number,
@Query('take') take?: number
@Query('skip', new ParseIntPipe({ optional: true })) skip?: number,
@Query('take', new ParseIntPipe({ optional: true })) take?: number
): Promise<AdminUsersResponse> {
return this.adminService.getUsers({
skip: isNaN(skip) ? undefined : skip,
take: isNaN(take) ? undefined : take
skip,
take
});
}

9
apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts

@ -22,6 +22,7 @@ import {
HttpException,
Inject,
Param,
ParseIntPipe,
Patch,
Query,
UseGuards,
@ -51,10 +52,10 @@ export class AssetProfilesController {
@Query('dataSource') filterByDataSource?: string,
@Query('presetId') presetId?: MarketDataPreset,
@Query('query') filterBySearchQuery?: string,
@Query('skip') skip?: number,
@Query('skip', new ParseIntPipe({ optional: true })) skip?: number,
@Query('sortColumn') sortColumn?: string,
@Query('sortDirection') sortDirection?: Prisma.SortOrder,
@Query('take') take?: number
@Query('take', new ParseIntPipe({ optional: true })) take?: number
): Promise<AssetProfilesResponse> {
const filters = this.apiService.buildFiltersFromQueryParams({
filterByAssetSubClasses,
@ -65,10 +66,10 @@ export class AssetProfilesController {
return this.assetProfilesService.getAssetProfiles({
filters,
presetId,
skip,
sortColumn,
sortDirection,
skip: isNaN(skip) ? undefined : skip,
take: isNaN(take) ? undefined : take
take
});
}

3
apps/api/src/app/import/import.service.ts

@ -69,8 +69,7 @@ export class ImportService {
const holding = await this.portfolioService.getHolding({
dataSource,
symbol,
userId,
impersonationId: undefined
userId
});
if (!holding) {

25
libs/ui/src/lib/treemap-chart/treemap-chart.component.ts

@ -30,7 +30,7 @@ import { Chart, Tooltip } from 'chart.js';
import { TreemapController, TreemapElement } from 'chartjs-chart-treemap';
import { isUUID } from 'class-validator';
import { differenceInDays, max } from 'date-fns';
import { orderBy } from 'lodash';
import { orderBy, round } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import OpenColor from 'open-color';
@ -221,9 +221,10 @@ export class GfTreemapChartComponent
)
}).toNumber();
// Round to 2 decimal places
annualizedNetPerformancePercent =
Math.round(annualizedNetPerformancePercent * 100) / 100;
annualizedNetPerformancePercent = round(
annualizedNetPerformancePercent,
2
);
const { backgroundColor } = this.getColor({
annualizedNetPerformancePercent,
@ -252,9 +253,10 @@ export class GfTreemapChartComponent
)
}).toNumber();
// Round to 2 decimal places
annualizedNetPerformancePercent =
Math.round(annualizedNetPerformancePercent * 100) / 100;
annualizedNetPerformancePercent = round(
annualizedNetPerformancePercent,
2
);
const { fontColor } = this.getColor({
annualizedNetPerformancePercent,
@ -267,11 +269,10 @@ export class GfTreemapChartComponent
display: true,
font: [{ size: 16 }, { lineHeight: 1.5, size: 14 }],
formatter: ({ raw }: GfTreemapScriptableContext) => {
// Round to 4 decimal places
let netPerformancePercentWithCurrencyEffect =
Math.round(
raw._data.netPerformancePercentWithCurrencyEffect * 10000
) / 10000;
let netPerformancePercentWithCurrencyEffect = round(
raw._data.netPerformancePercentWithCurrencyEffect,
4
);
if (Math.abs(netPerformancePercentWithCurrencyEffect) === 0) {
netPerformancePercentWithCurrencyEffect = Math.abs(

Loading…
Cancel
Save