Browse Source

Refactor functions

pull/410/head
Thomas 4 years ago
parent
commit
840ccb027d
  1. 76
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

76
apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

@ -39,7 +39,7 @@ export class YahooFinanceService implements DataProviderInterface {
return {}; return {};
} }
const yahooFinanceSymbols = aSymbols.map((symbol) => const yahooFinanceSymbols = aSymbols.map((symbol) =>
convertToYahooFinanceSymbol(symbol) this.convertToYahooFinanceSymbol(symbol)
); );
try { try {
@ -54,7 +54,7 @@ export class YahooFinanceService implements DataProviderInterface {
for (const [yahooFinanceSymbol, value] of Object.entries(data)) { for (const [yahooFinanceSymbol, value] of Object.entries(data)) {
// Convert symbols back // Convert symbols back
const symbol = convertFromYahooFinanceSymbol(yahooFinanceSymbol); const symbol = this.convertFromYahooFinanceSymbol(yahooFinanceSymbol);
const { assetClass, assetSubClass } = this.parseAssetClass(value.price); const { assetClass, assetSubClass } = this.parseAssetClass(value.price);
@ -132,7 +132,7 @@ export class YahooFinanceService implements DataProviderInterface {
} }
const yahooFinanceSymbols = aSymbols.map((symbol) => { const yahooFinanceSymbols = aSymbols.map((symbol) => {
return convertToYahooFinanceSymbol(symbol); return this.convertToYahooFinanceSymbol(symbol);
}); });
try { try {
@ -152,7 +152,7 @@ export class YahooFinanceService implements DataProviderInterface {
historicalData historicalData
)) { )) {
// Convert symbols back // Convert symbols back
const symbol = convertFromYahooFinanceSymbol(yahooFinanceSymbol); const symbol = this.convertFromYahooFinanceSymbol(yahooFinanceSymbol);
response[symbol] = {}; response[symbol] = {};
timeSeries.forEach((timeSerie) => { timeSeries.forEach((timeSerie) => {
@ -223,6 +223,40 @@ export class YahooFinanceService implements DataProviderInterface {
return { items }; return { items };
} }
private convertFromYahooFinanceSymbol(aYahooFinanceSymbol: string) {
const symbol = aYahooFinanceSymbol.replace('-', '');
return symbol.replace('=X', '');
}
/**
* Converts a symbol to a Yahoo Finance symbol
*
* Currency: USDCHF -> USDCHF=X
* Cryptocurrency: BTCUSD -> BTC-USD
* DOGEUSD -> DOGE-USD
* SOL1USD -> SOL1-USD
*/
private convertToYahooFinanceSymbol(aSymbol: string) {
if (
(aSymbol.includes('CHF') ||
aSymbol.includes('EUR') ||
aSymbol.includes('USD')) &&
aSymbol.length >= 6
) {
if (isCurrency(aSymbol.substring(0, aSymbol.length - 3))) {
return `${aSymbol}=X`;
} else if (isCrypto(aSymbol) || isCrypto(aSymbol.replace('1', ''))) {
// Add a dash before the last three characters
// BTCUSD -> BTC-USD
// DOGEUSD -> DOGE-USD
// SOL1USD -> SOL1-USD
return aSymbol.replace('USD', '-USD');
}
}
return aSymbol;
}
private parseAssetClass(aPrice: IYahooFinancePrice): { private parseAssetClass(aPrice: IYahooFinancePrice): {
assetClass: AssetClass; assetClass: AssetClass;
assetSubClass: AssetSubClass; assetSubClass: AssetSubClass;
@ -256,37 +290,3 @@ export class YahooFinanceService implements DataProviderInterface {
return aString; return aString;
} }
} }
export const convertFromYahooFinanceSymbol = (aYahooFinanceSymbol: string) => {
const symbol = aYahooFinanceSymbol.replace('-', '');
return symbol.replace('=X', '');
};
/**
* Converts a symbol to a Yahoo Finance symbol
*
* Currency: USDCHF -> USDCHF=X
* Cryptocurrency: BTCUSD -> BTC-USD
* DOGEUSD -> DOGE-USD
* SOL1USD -> SOL1-USD
*/
const convertToYahooFinanceSymbol = (aSymbol: string) => {
if (
(aSymbol.includes('CHF') ||
aSymbol.includes('EUR') ||
aSymbol.includes('USD')) &&
aSymbol.length >= 6
) {
if (isCurrency(aSymbol.substring(0, aSymbol.length - 3))) {
return `${aSymbol}=X`;
} else if (isCrypto(aSymbol) || isCrypto(aSymbol.replace('1', ''))) {
// Add a dash before the last three characters
// BTCUSD -> BTC-USD
// DOGEUSD -> DOGE-USD
// SOL1USD -> SOL1-USD
return aSymbol.replace('USD', '-USD');
}
}
return aSymbol;
};

Loading…
Cancel
Save