Browse Source

Feature/extend data providers management by every data provider in use (#5386)

* Extend data providers management

* Update changelog
pull/5385/head^2
Thomas Kaul 20 hours ago
committed by GitHub
parent
commit
21d337525d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 6
      CHANGELOG.md
  2. 2
      apps/api/src/app/admin/admin.controller.ts
  3. 30
      apps/api/src/app/admin/admin.service.ts

6
CHANGELOG.md

@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
### Added
- Extended the data providers management of the admin control panel by every data provider in use
## 2.192.0 - 2025-08-21 ## 2.192.0 - 2025-08-21
### Added ### Added

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

@ -66,7 +66,7 @@ export class AdminController {
@HasPermission(permissions.accessAdminControl) @HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getAdminData(): Promise<AdminData> { public async getAdminData(): Promise<AdminData> {
return this.adminService.get({ user: this.request.user }); return this.adminService.get();
} }
@Get('demo-user/sync') @Get('demo-user/sync')

30
apps/api/src/app/admin/admin.service.ts

@ -29,7 +29,7 @@ import {
Filter Filter
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
import { MarketDataPreset, UserWithSettings } from '@ghostfolio/common/types'; import { MarketDataPreset } from '@ghostfolio/common/types';
import { import {
BadRequestException, BadRequestException,
@ -133,11 +133,8 @@ export class AdminService {
} }
} }
public async get({ user }: { user: UserWithSettings }): Promise<AdminData> { public async get(): Promise<AdminData> {
const dataSources = await this.dataProviderService.getDataSources({ const dataSources = Object.values(DataSource);
user,
includeGhostfolio: true
});
const [settings, transactionCount, userCount] = await Promise.all([ const [settings, transactionCount, userCount] = await Promise.all([
this.propertyService.get(), this.propertyService.get(),
@ -145,24 +142,31 @@ export class AdminService {
this.countUsersWithAnalytics() this.countUsersWithAnalytics()
]); ]);
const dataProviders = await Promise.all( const dataProviders = (
await Promise.all(
dataSources.map(async (dataSource) => { dataSources.map(async (dataSource) => {
const dataProviderInfo = this.dataProviderService const assetProfileCount =
.getDataProvider(dataSource) await this.prismaService.symbolProfile.count({
.getDataProviderInfo();
const assetProfileCount = await this.prismaService.symbolProfile.count({
where: { where: {
dataSource dataSource
} }
}); });
if (assetProfileCount > 0 || dataSource === 'GHOSTFOLIO') {
const dataProviderInfo = this.dataProviderService
.getDataProvider(dataSource)
.getDataProviderInfo();
return { return {
...dataProviderInfo, ...dataProviderInfo,
assetProfileCount assetProfileCount
}; };
}
return null;
}) })
); )
).filter(Boolean);
return { return {
dataProviders, dataProviders,

Loading…
Cancel
Save