bitflo/src/price.js
2023-06-12 14:23:52 +05:30

61 lines
2.5 KiB
JavaScript

'use strict';
const DB = require("./database");
var currentRate = {}; //container for FLO price (from API or by model)
//store FLO price in database every 1 hr
function storeHistory(asset, rate) {
DB.query("INSERT INTO PriceHistory (asset, rate) VALUE (?)", [[asset, global.toStandardDecimal(rate)]])
.then(_ => null).catch(error => console.error(error))
}
function getHistory(asset, duration = '') {
return new Promise((resolve, reject) => {
let { statement, values } = getHistory.getRateStatement(asset, duration);
DB.query(statement, values)
.then(result => resolve(result))
.catch(error => reject(error))
});
}
getHistory.statement = {
'all-time': "SELECT DATE(rec_time) AS time, AVG(rate) as rate FROM PriceHistory WHERE asset=? GROUP BY time ORDER BY time",
'year': "SELECT DATE(rec_time) AS time, AVG(rate) as rate FROM PriceHistory WHERE asset=? AND rec_time >= NOW() - INTERVAL ? year GROUP BY time ORDER BY time",
'month': "SELECT DATE(rec_time) AS time, AVG(rate) as rate FROM PriceHistory WHERE asset=? AND rec_time >= NOW() - INTERVAL ? month GROUP BY time ORDER BY time",
'week': "SELECT rec_time AS time, rate FROM PriceHistory WHERE asset=? AND rec_time >= NOW() - INTERVAL ? week ORDER BY time",
'day': "SELECT rec_time AS time, rate FROM PriceHistory WHERE asset=? AND rec_time >= NOW() - INTERVAL ? day ORDER BY time"
}
getHistory.getRateStatement = (asset, duration) => {
let n = duration.match(/\d+/g),
d = duration.match(/\D+/g);
n = n ? n[0] || 1 : 1;
d = d ? d[0].replace(/[-\s]/g, '') : "";
switch (d.toLowerCase()) {
case "day":
case "days":
return { statement: getHistory.statement['day'], values: [asset, n] };
case "week":
case "weeks":
return { statement: getHistory.statement['week'], values: [asset, n] };
case "month":
case "months":
return { statement: getHistory.statement['month'], values: [asset, n] };
case "year":
case "years":
return { statement: getHistory.statement['year'], values: [asset, n] };
case "alltime":
return { statement: getHistory.statement['all-time'], values: [asset] };
default:
return { statement: getHistory.statement['day'], values: [asset, 1] };
}
}
module.exports = {
getHistory,
storeHistory,
get currentRates() {
return Object.assign({}, currentRate);
}
}