Switch currencyservice to static JSON file (#173)
This commit is contained in:
parent
d5db024763
commit
f7580958cc
2 changed files with 38 additions and 30 deletions
35
src/currencyservice/data/currency_conversion.json
Normal file
35
src/currencyservice/data/currency_conversion.json
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
"EUR": "1.0",
|
||||||
|
"USD": "1.1305",
|
||||||
|
"JPY": "126.40",
|
||||||
|
"BGN": "1.9558",
|
||||||
|
"CZK": "25.592",
|
||||||
|
"DKK": "7.4609",
|
||||||
|
"GBP": "0.85970",
|
||||||
|
"HUF": "315.51",
|
||||||
|
"PLN": "4.2996",
|
||||||
|
"RON": "4.7463",
|
||||||
|
"SEK": "10.5375",
|
||||||
|
"CHF": "1.1360",
|
||||||
|
"ISK": "136.80",
|
||||||
|
"NOK": "9.8040",
|
||||||
|
"HRK": "7.4210",
|
||||||
|
"RUB": "74.4208",
|
||||||
|
"TRY": "6.1247",
|
||||||
|
"AUD": "1.6072",
|
||||||
|
"BRL": "4.2682",
|
||||||
|
"CAD": "1.5128",
|
||||||
|
"CNY": "7.5857",
|
||||||
|
"HKD": "8.8743",
|
||||||
|
"IDR": "15999.40",
|
||||||
|
"ILS": "4.0875",
|
||||||
|
"INR": "79.4320",
|
||||||
|
"KRW": "1275.05",
|
||||||
|
"MXN": "21.7999",
|
||||||
|
"MYR": "4.6289",
|
||||||
|
"NZD": "1.6679",
|
||||||
|
"PHP": "59.083",
|
||||||
|
"SGD": "1.5349",
|
||||||
|
"THB": "36.012",
|
||||||
|
"ZAR": "16.0583"
|
||||||
|
}
|
|
@ -30,8 +30,6 @@ require('@google-cloud/debug-agent').start({
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const grpc = require('grpc');
|
const grpc = require('grpc');
|
||||||
const request = require('request');
|
|
||||||
const xml2js = require('xml2js');
|
|
||||||
const pino = require('pino');
|
const pino = require('pino');
|
||||||
const protoLoader = require('@grpc/proto-loader');
|
const protoLoader = require('@grpc/proto-loader');
|
||||||
|
|
||||||
|
@ -39,7 +37,6 @@ const MAIN_PROTO_PATH = path.join(__dirname, './proto/demo.proto');
|
||||||
const HEALTH_PROTO_PATH = path.join(__dirname, './proto/grpc/health/v1/health.proto');
|
const HEALTH_PROTO_PATH = path.join(__dirname, './proto/grpc/health/v1/health.proto');
|
||||||
|
|
||||||
const PORT = 7000;
|
const PORT = 7000;
|
||||||
const DATA_URL = 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml';
|
|
||||||
|
|
||||||
const shopProto = _loadProto(MAIN_PROTO_PATH).hipstershop;
|
const shopProto = _loadProto(MAIN_PROTO_PATH).hipstershop;
|
||||||
const healthProto = _loadProto(HEALTH_PROTO_PATH).grpc.health.v1;
|
const healthProto = _loadProto(HEALTH_PROTO_PATH).grpc.health.v1;
|
||||||
|
@ -69,36 +66,12 @@ function _loadProto (path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function that gets currency data from an XML webpage
|
* Helper function that gets currency data from a stored JSON file
|
||||||
* Uses public data from European Central Bank
|
* Uses public data from European Central Bank
|
||||||
*/
|
*/
|
||||||
let _data;
|
|
||||||
function _getCurrencyData (callback) {
|
function _getCurrencyData (callback) {
|
||||||
if (!_data) {
|
const data = require('./data/currency_conversion.json');
|
||||||
logger.info('Fetching currency data...');
|
callback(data);
|
||||||
request(DATA_URL, (err, res) => {
|
|
||||||
if (err) {
|
|
||||||
throw new Error(`Error getting data: ${err}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const body = res.body.split('\n').slice(7, -2).join('\n');
|
|
||||||
xml2js.parseString(body, (err, resJs) => {
|
|
||||||
if (err) {
|
|
||||||
throw new Error(`Error parsing HTML: ${err}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const array = resJs['Cube']['Cube'].map(x => x['$']);
|
|
||||||
const results = array.reduce((acc, x) => {
|
|
||||||
acc[x['currency']] = x['rate'];
|
|
||||||
return acc;
|
|
||||||
}, { 'EUR': '1.0' });
|
|
||||||
_data = results;
|
|
||||||
callback(_data);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
callback(_data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue