From 6408378787314c24b549542e87c9c8bea8853441 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 19 Jun 2026 20:10:34 +0200 Subject: [PATCH] Refactoring --- .../admin-market-data.component.ts | 2 +- libs/common/src/lib/helper.ts | 2 +- .../src/lib/assistant/assistant.component.ts | 5 +-- libs/ui/src/lib/services/admin.service.ts | 44 +------------------ libs/ui/src/lib/services/data.service.ts | 37 ++++++++++++++++ 5 files changed, 42 insertions(+), 48 deletions(-) diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index e71bdd47c..f7396eb1d 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -375,7 +375,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { this.selection.clear(); - this.adminService + this.dataService .fetchAssetProfiles({ sortColumn, sortDirection, diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 376ba7dbe..5bd6671f2 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -44,8 +44,8 @@ import { ghostfolioScraperApiSymbolPrefix } from './config'; import { - AssetProfileItem, AssetProfileIdentifier, + AssetProfileItem, Benchmark } from './interfaces'; import { BenchmarkTrend, ColorScheme } from './types'; diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index e23190939..3f8efa6ec 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -3,7 +3,7 @@ import { Filter, PortfolioPosition, User } from '@ghostfolio/common/interfaces'; import { InternalRoute } from '@ghostfolio/common/routes/interfaces/internal-route.interface'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { AccountWithPlatform, DateRange } from '@ghostfolio/common/types'; -import { AdminService, DataService } from '@ghostfolio/ui/services'; +import { DataService } from '@ghostfolio/ui/services'; import { FocusKeyManager } from '@angular/cdk/a11y'; import { @@ -155,7 +155,6 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { private preselectionTimeout: ReturnType; public constructor( - private adminService: AdminService, private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, private destroyRef: DestroyRef @@ -674,7 +673,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { private searchAssetProfiles( aSearchTerm: string ): Observable { - return this.adminService + return this.dataService .fetchAssetProfiles({ filters: [ { diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts index 74a6778bc..0eea768d6 100644 --- a/libs/ui/src/lib/services/admin.service.ts +++ b/libs/ui/src/lib/services/admin.service.ts @@ -14,29 +14,23 @@ import { AdminUserResponse, AdminUsersResponse, AssetProfileIdentifier, - AssetProfilesResponse, DataProviderGhostfolioStatusResponse, DataProviderHistoricalResponse, - EnhancedSymbolProfile, - Filter + EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable, inject } from '@angular/core'; -import { SortDirection } from '@angular/material/sort'; import { DataSource, MarketData, Platform } from '@prisma/client'; import { JobStatus } from 'bull'; import { isNumber } from 'lodash'; -import { DataService } from './data.service'; - @Injectable({ providedIn: 'root' }) export class AdminService { - private readonly dataService = inject(DataService); private readonly environment = inject(GF_ENVIRONMENT); private readonly http = inject(HttpClient); @@ -81,42 +75,6 @@ export class AdminService { return this.http.get('/api/v1/admin'); } - public fetchAssetProfiles({ - filters, - skip, - sortColumn, - sortDirection, - take - }: { - filters?: Filter[]; - skip?: number; - sortColumn?: string; - sortDirection?: SortDirection; - take: number; - }) { - let params = this.dataService.buildFiltersAsQueryParams({ filters }); - - if (skip) { - params = params.append('skip', skip); - } - - if (sortColumn) { - params = params.append('sortColumn', sortColumn); - } - - if (sortDirection) { - params = params.append('sortDirection', sortDirection); - } - - if (take) { - params = params.append('take', take); - } - - return this.http.get('/api/v1/asset-profiles', { - params - }); - } - public fetchGhostfolioDataProviderStatus(aApiKey: string) { const headers = new HttpHeaders({ [HEADER_KEY_SKIP_INTERCEPTOR]: 'true', diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index a3d8bec98..079ea1bf6 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -28,6 +28,7 @@ import { AiPromptResponse, ApiKeyResponse, AssetProfileIdentifier, + AssetProfilesResponse, AssetResponse, BenchmarkMarketDataDetailsResponse, BenchmarkResponse, @@ -378,6 +379,42 @@ export class DataService { ); } + public fetchAssetProfiles({ + filters, + skip, + sortColumn, + sortDirection, + take + }: { + filters?: Filter[]; + skip?: number; + sortColumn?: string; + sortDirection?: SortDirection; + take: number; + }) { + let params = this.buildFiltersAsQueryParams({ filters }); + + if (skip) { + params = params.append('skip', skip); + } + + if (sortColumn) { + params = params.append('sortColumn', sortColumn); + } + + if (sortDirection) { + params = params.append('sortDirection', sortDirection); + } + + if (take) { + params = params.append('take', take); + } + + return this.http.get('/api/v1/asset-profiles', { + params + }); + } + public fetchBenchmarkForUser({ dataSource, filters,