Browse Source

Refactoring

pull/6622/head
Thomas Kaul 2 months ago
parent
commit
6a6c70f20e
  1. 8
      apps/api/src/app/activities/activities.controller.ts
  2. 2
      apps/api/src/app/activities/activities.service.ts
  3. 8
      apps/api/src/app/export/export.controller.ts
  4. 9
      apps/api/src/services/api/api.service.ts
  5. 2
      apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
  6. 21
      libs/common/src/lib/helper.spec.ts
  7. 4
      libs/common/src/lib/helper.ts

8
apps/api/src/app/activities/activities.controller.ts

@ -13,7 +13,6 @@ import {
HEADER_KEY_IMPERSONATION HEADER_KEY_IMPERSONATION
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { CreateOrderDto, UpdateOrderDto } from '@ghostfolio/common/dtos'; import { CreateOrderDto, UpdateOrderDto } from '@ghostfolio/common/dtos';
import { splitStringToArray } from '@ghostfolio/common/helper';
import { import {
ActivitiesResponse, ActivitiesResponse,
ActivityResponse ActivityResponse
@ -124,10 +123,6 @@ export class ActivitiesController {
@Query('tags') filterByTags?: string, @Query('tags') filterByTags?: string,
@Query('take') take?: number @Query('take') take?: number
): Promise<ActivitiesResponse> { ): Promise<ActivitiesResponse> {
const types = filterByTypes
? (splitStringToArray(filterByTypes) as ActivityType[])
: undefined;
let endDate: Date; let endDate: Date;
let startDate: Date; let startDate: Date;
@ -145,6 +140,9 @@ export class ActivitiesController {
const impersonationUserId = const impersonationUserId =
await this.impersonationService.validateImpersonationId(impersonationId); await this.impersonationService.validateImpersonationId(impersonationId);
const types = (filterByTypes?.split(',') as ActivityType[]) ?? [];
const userCurrency = this.request.user.settings.settings.baseCurrency; const userCurrency = this.request.user.settings.settings.baseCurrency;
const { activities, count } = await this.activitiesService.getActivities({ const { activities, count } = await this.activitiesService.getActivities({

2
apps/api/src/app/activities/activities.service.ts

@ -629,7 +629,7 @@ export class ActivitiesService {
orderBy = [{ [sortColumn]: sortDirection }]; orderBy = [{ [sortColumn]: sortDirection }];
} }
if (types) { if (types?.length > 0) {
where.type = { in: types }; where.type = { in: types };
} }

8
apps/api/src/app/export/export.controller.ts

@ -2,7 +2,6 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { splitStringToArray } from '@ghostfolio/common/helper';
import { ExportResponse } from '@ghostfolio/common/interfaces'; import { ExportResponse } from '@ghostfolio/common/interfaces';
import type { RequestWithUser } from '@ghostfolio/common/types'; import type { RequestWithUser } from '@ghostfolio/common/types';
@ -41,10 +40,9 @@ export class ExportController {
@Query('symbol') filterBySymbol?: string, @Query('symbol') filterBySymbol?: string,
@Query('tags') filterByTags?: string @Query('tags') filterByTags?: string
): Promise<ExportResponse> { ): Promise<ExportResponse> {
const activityIds = splitStringToArray(filterByActivityIds); const activityIds = filterByActivityIds?.split(',') ?? [];
const activityTypes = filterByTypes const activityTypes = (filterByTypes?.split(',') as ActivityType[]) ?? [];
? (splitStringToArray(filterByTypes) as ActivityType[])
: undefined;
const filters = this.apiService.buildFiltersFromQueryParams({ const filters = this.apiService.buildFiltersFromQueryParams({
filterByAccounts, filterByAccounts,
filterByAssetClasses, filterByAssetClasses,

9
apps/api/src/services/api/api.service.ts

@ -1,4 +1,3 @@
import { splitStringToArray } from '@ghostfolio/common/helper';
import { Filter } from '@ghostfolio/common/interfaces'; import { Filter } from '@ghostfolio/common/interfaces';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
@ -24,14 +23,14 @@ export class ApiService {
filterBySymbol?: string; filterBySymbol?: string;
filterByTags?: string; filterByTags?: string;
}): Filter[] { }): Filter[] {
const accountIds = splitStringToArray(filterByAccounts); const accountIds = filterByAccounts?.split(',') ?? [];
const assetClasses = splitStringToArray(filterByAssetClasses); const assetClasses = filterByAssetClasses?.split(',') ?? [];
const assetSubClasses = splitStringToArray(filterByAssetSubClasses); const assetSubClasses = filterByAssetSubClasses?.split(',') ?? [];
const dataSource = filterByDataSource; const dataSource = filterByDataSource;
const holdingType = filterByHoldingType; const holdingType = filterByHoldingType;
const searchQuery = filterBySearchQuery?.toLowerCase(); const searchQuery = filterBySearchQuery?.toLowerCase();
const symbol = filterBySymbol; const symbol = filterBySymbol;
const tagIds = splitStringToArray(filterByTags); const tagIds = filterByTags?.split(',') ?? [];
const filters = [ const filters = [
...accountIds.map((accountId) => { ...accountIds.map((accountId) => {

2
apps/client/src/app/pages/portfolio/activities/activities-page.component.ts

@ -141,11 +141,11 @@ export class GfActivitiesPageComponent implements OnInit {
this.dataService this.dataService
.fetchActivities({ .fetchActivities({
range,
activityTypes: this.activityTypesFilter.length activityTypes: this.activityTypesFilter.length
? this.activityTypesFilter ? this.activityTypesFilter
: undefined, : undefined,
filters: this.userService.getFilters(), filters: this.userService.getFilters(),
range,
skip: this.pageIndex * this.pageSize, skip: this.pageIndex * this.pageSize,
sortColumn: this.sortColumn, sortColumn: this.sortColumn,
sortDirection: this.sortDirection, sortDirection: this.sortDirection,

21
libs/common/src/lib/helper.spec.ts

@ -1,7 +1,6 @@
import { import {
extractNumberFromString, extractNumberFromString,
getNumberFormatGroup, getNumberFormatGroup
splitStringToArray
} from '@ghostfolio/common/helper'; } from '@ghostfolio/common/helper';
describe('Helper', () => { describe('Helper', () => {
@ -117,22 +116,4 @@ describe('Helper', () => {
expect(getNumberFormatGroup()).toEqual(','); expect(getNumberFormatGroup()).toEqual(',');
}); });
}); });
describe('splitStringToArray', () => {
it('should split a comma-separated string', () => {
expect(splitStringToArray('a,b,c')).toEqual(['a', 'b', 'c']);
});
it('should return a single-element array for a string without commas', () => {
expect(splitStringToArray('a')).toEqual(['a']);
});
it('should return an empty array for undefined', () => {
expect(splitStringToArray(undefined)).toEqual([]);
});
it('should return an empty array for no argument', () => {
expect(splitStringToArray()).toEqual([]);
});
});
}); });

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

@ -474,7 +474,3 @@ export function resolveMarketCondition(
return { emoji: undefined }; return { emoji: undefined };
} }
} }
export function splitStringToArray(aString?: string): string[] {
return aString?.split(',') ?? [];
}

Loading…
Cancel
Save