From 1dd7a6ebace1b48439b8db7783bfe017b1ed6bc9 Mon Sep 17 00:00:00 2001 From: softsimon Date: Fri, 12 Apr 2024 15:59:33 +0900 Subject: [PATCH] Convert v3 api into v1 --- .../tasks/price-feeds/free-currency-api.ts | 49 ++++++++++++++----- backend/src/tasks/price-updater.ts | 2 +- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/backend/src/tasks/price-feeds/free-currency-api.ts b/backend/src/tasks/price-feeds/free-currency-api.ts index be8e91ea8..2a21a16d2 100644 --- a/backend/src/tasks/price-feeds/free-currency-api.ts +++ b/backend/src/tasks/price-feeds/free-currency-api.ts @@ -1,3 +1,4 @@ +import config from '../../config'; import { query } from '../../utils/axios-query'; import { ConversionFeed, ConversionRates } from '../price-updater'; @@ -37,19 +38,26 @@ const emptyRates = { ZAR: -1, }; -class FreeCurrencyApi implements ConversionFeed { - private API_KEY: string; - private apiUrlPrefix: string = `https://api.freecurrencyapi.com/v1/`; - - constructor(apiKey: string, paid = false) { - this.API_KEY = apiKey; - if (paid) { - this.apiUrlPrefix = `https://api.currencyapi.com/v3/`; - } +type PaidCurrencyData = { + [key: string]: { + code: string; + value: number; } +}; + +type FreeCurrencyData = { + [key: string]: number; +}; + +class FreeCurrencyApi implements ConversionFeed { + private API_KEY = config.FIAT_PRICE.API_KEY; + private PAID = config.FIAT_PRICE.PAID; + private API_URL_PREFIX: string = this.PAID ? `https://api.currencyapi.com/v3/` : `https://api.freecurrencyapi.com/v1/`; + + constructor() { } public async $getQuota(): Promise { - const response = await query(`${this.apiUrlPrefix}status?apikey=${this.API_KEY}`); + const response = await query(`${this.API_URL_PREFIX}status?apikey=${this.API_KEY}`); if (response && response['quotas']) { return response['quotas']; } @@ -57,21 +65,36 @@ class FreeCurrencyApi implements ConversionFeed { } public async $fetchLatestConversionRates(): Promise { - const response = await query(`${this.apiUrlPrefix}latest?apikey=${this.API_KEY}`); + const response = await query(`${this.API_URL_PREFIX}latest?apikey=${this.API_KEY}`); if (response && response['data']) { + if (this.PAID) { + response['data'] = this.convertData(response['data']); + } return response['data']; } return emptyRates; } public async $fetchConversionRates(date: string): Promise { - const response = await query(`${this.apiUrlPrefix}historical?date=${date}&apikey=${this.API_KEY}`); - if (response && response['data'] && response['data'][date]) { + const response = await query(`${this.API_URL_PREFIX}historical?date=${date}&apikey=${this.API_KEY}`); + if (response && response['data'] && (response['data'][date] || this.PAID)) { + if (this.PAID) { + response['data'] = this.convertData(response['data']); + response['data'][response['meta'].last_updated_at.substr(0, 10)] = response['data']; + } return response['data'][date]; } return emptyRates; } + private convertData(data: PaidCurrencyData): FreeCurrencyData { + const simplifiedData: FreeCurrencyData = {}; + for (const key in data) { + simplifiedData[key] = data[key].value; + } + return simplifiedData; + } + } export default FreeCurrencyApi; diff --git a/backend/src/tasks/price-updater.ts b/backend/src/tasks/price-updater.ts index 7f975766f..16fe713b7 100644 --- a/backend/src/tasks/price-updater.ts +++ b/backend/src/tasks/price-updater.ts @@ -71,7 +71,7 @@ class PriceUpdater { this.feeds.push(new BitfinexApi()); this.feeds.push(new GeminiApi()); - this.currencyConversionFeed = new FreeCurrencyApi(config.FIAT_PRICE.API_KEY, config.FIAT_PRICE.PAID); + this.currencyConversionFeed = new FreeCurrencyApi(); this.setCyclePosition(); }