61 lines
2.5 KiB
JavaScript
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);
|
|
}
|
|
} |