Browse Source

Bugfix/fix asset class parsing in Financial Modeling Prep service for exchange rates (#4559)

* Fix the asset class parsing

* Update changelog
pull/4561/head
Thomas Kaul 4 days ago
committed by GitHub
parent
commit
b6f87e46a7
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 5
      apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts
  3. 23
      apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts

1
CHANGELOG.md

@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Fixed the functionality to open an asset profile of a custom currency in the admin control panel
- Fixed the asset class parsing in the _Financial Modeling Prep_ service for exchange rates
## 2.152.1 - 2025-04-17

5
apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts

@ -11,6 +11,7 @@ import {
IDataProviderHistoricalResponse,
IDataProviderResponse
} from '@ghostfolio/api/services/interfaces/interfaces';
import { DEFAULT_CURRENCY } from '@ghostfolio/common/config';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import {
DataProviderInfo,
@ -72,7 +73,9 @@ export class AlphaVantageService implements DataProviderInterface {
const historicalData: {
[symbol: string]: IAlphaVantageHistoricalResponse[];
} = await this.alphaVantage.crypto.daily(
symbol.substring(0, symbol.length - 3).toLowerCase(),
symbol
.substring(0, symbol.length - DEFAULT_CURRENCY.length)
.toLowerCase(),
'usd'
);

23
apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts

@ -12,8 +12,11 @@ import {
IDataProviderHistoricalResponse,
IDataProviderResponse
} from '@ghostfolio/api/services/interfaces/interfaces';
import { REPLACE_NAME_PARTS } from '@ghostfolio/common/config';
import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper';
import {
DEFAULT_CURRENCY,
REPLACE_NAME_PARTS
} from '@ghostfolio/common/config';
import { DATE_FORMAT, isCurrency, parseDate } from '@ghostfolio/common/helper';
import {
DataProviderInfo,
LookupItem,
@ -67,7 +70,15 @@ export class FinancialModelingPrepService implements DataProviderInterface {
};
try {
if (this.cryptocurrencyService.isCryptocurrency(symbol)) {
if (
isCurrency(symbol.substring(0, symbol.length - DEFAULT_CURRENCY.length))
) {
response.assetClass = AssetClass.LIQUIDITY;
response.assetSubClass = AssetSubClass.CASH;
response.currency = symbol.substring(
symbol.length - DEFAULT_CURRENCY.length
);
} else if (this.cryptocurrencyService.isCryptocurrency(symbol)) {
const [quote] = await fetch(
`${this.URL}/quote/${symbol}?apikey=${this.apiKey}`,
{
@ -77,7 +88,9 @@ export class FinancialModelingPrepService implements DataProviderInterface {
response.assetClass = AssetClass.LIQUIDITY;
response.assetSubClass = AssetSubClass.CRYPTOCURRENCY;
response.currency = symbol.substring(symbol.length - 3);
response.currency = symbol.substring(
symbol.length - DEFAULT_CURRENCY.length
);
response.name = quote.name;
} else {
const [assetProfile] = await fetch(
@ -472,6 +485,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
let assetClass: AssetClass;
let assetSubClass: AssetSubClass;
if (profile) {
if (profile.isEtf) {
assetClass = AssetClass.EQUITY;
assetSubClass = AssetSubClass.ETF;
@ -482,6 +496,7 @@ export class FinancialModelingPrepService implements DataProviderInterface {
assetClass = AssetClass.EQUITY;
assetSubClass = AssetSubClass.STOCK;
}
}
return { assetClass, assetSubClass };
}

Loading…
Cancel
Save