From e702ad690c2d629b8510c375c4ba604d9177bfad Mon Sep 17 00:00:00 2001 From: Luke Larsen Date: Wed, 13 Nov 2024 14:31:34 -0500 Subject: [PATCH 1/2] Base code done --- src/db.js | 7 ++++++ src/remoteData.js | 58 +++++++++++++++++++++++++++++++++++++++++++++++ src/routes.js | 2 ++ 3 files changed, 67 insertions(+) diff --git a/src/db.js b/src/db.js index 554be0a..b2a3368 100644 --- a/src/db.js +++ b/src/db.js @@ -39,6 +39,13 @@ async function jumpStart(){ coinMarketCap: 10, lastUpdated: 0, }) + DataSourceDataSchema.create({ + dataSourceName: 'tradeOgre', + data: [], + enabled: true, + updateSnapshotTime: 120, + lastUpdated: 0, + }) } } diff --git a/src/remoteData.js b/src/remoteData.js index c45cf52..65cc125 100644 --- a/src/remoteData.js +++ b/src/remoteData.js @@ -71,6 +71,13 @@ async function getMarketData(marketData, dataSource, baseCurrency){ } } } + if (dataSource == 'tradeOgre'){ + let tradeOgreDataStored = await DataSourceDataSchema.findOne({ dataSourceName: 'tradeOgre' }).exec(); + if(tradeOgreDataStored.enabled){ + let tradeOgreData = await getDataTradeOgre(marketData, baseCurrency) + if(tradeOgreData){}else{console.log("Error retrieving tradeogre.com data")} + } + } } /** @@ -341,6 +348,56 @@ async function getDataCoinGeckoDirect(marketData, baseCurrency){ } } + +/** + * + * @param {*} marketData + * @param {*} baseCurrency + * @returns + */ +async function getDataTradeOgre(marketData, baseCurrency){ + console.log("ran tradeOgre") + let url = 'https://tradeogre.com/api/v1/markets' + let data = await getData(url) + if(Array.isArray(data)){ + let tradeOgreReturnData ={} + tradeOgreReturnData['tradeOgre'] = {} + + let marketDataTradeOgreReturn = [] + data.forEach(function(marketDataName){ + // console.log(Object.values(marketDataName)[0].basename) + if(Object.values(marketDataName)[0].basename == 'PIVX'){ + // console.log(marketDataName) + marketDataTradeOgreReturn.push(marketDataName) + } + }) + + marketDataTradeOgreReturn.forEach(function(orderedMarketData){ + console.log(Object.keys(orderedMarketData)[0].replace('PIVX-','')) + console.log(Object.values(orderedMarketData)[0].price) + let key = Object.keys(orderedMarketData)[0].replace('PIVX-','') + let price = Object.values(orderedMarketData)[0].price + // Set the value to db + tradeOgreReturnData.tradeOgre[key] = parseFloat(price) + }) + + + let dataFromDisk = await getMarketDataSource(marketData,"tradeOgre") + if(dataFromDisk === undefined){ + const tradeOgreDataResult = new dataSource("tradeOgre",tradeOgreReturnData,Math.floor(new Date().getTime() / 1000)) + updateOrCreateDataSource(tradeOgreDataResult) + }else{ + // Update coingecko + updateDataSource(marketData, dataFromDisk, tradeOgreReturnData, Math.floor(new Date().getTime() / 1000)) + } + // For the old endpoint will be removed soon + return marketDataTradeOgreReturn + }else{ + console.log("tradeOgre Error") + console.log(data) + } +} + //Auto check the data async function autoCheckData(){ // Fetch market data from disk @@ -351,6 +408,7 @@ async function autoCheckData(){ await getMarketData(arrMarketData, 'coinGeckoDirect', 'usd') await getMarketData(arrMarketData, 'binance','usd'); await getMarketData(arrMarketData, 'coinMarketCap','usd'); + await getMarketData(arrMarketData, 'tradeOgre','usd'); arrMarketData = await readDataSource(); } // Aggregate the prices from our various sources diff --git a/src/routes.js b/src/routes.js index 9b56f75..4ce3e95 100644 --- a/src/routes.js +++ b/src/routes.js @@ -10,6 +10,7 @@ const dataSourceUpdateTime = { //listed in seconds coinGeckoDirect: 70, coinMarketCap: 10, binance: 10, + tradeOgre: 120, } /** An optional prefix for the service router: useful if plugging in to an existing Express App */ @@ -156,6 +157,7 @@ async function prepareMarketData() { await getMarketData(arrMarketData, 'coinGeckoDirect', 'usd') await getMarketData(arrMarketData, 'binance','usd'); await getMarketData(arrMarketData, 'coinMarketCap','usd'); + await getMarketData(arrMarketData, 'tradeOgre','usd'); arrMarketData = await readDataSource(); } From f128336b201f1e2f8460fdaaf9211ce98919854d Mon Sep 17 00:00:00 2001 From: Luke Larsen Date: Wed, 13 Nov 2024 14:50:11 -0500 Subject: [PATCH 2/2] tickers must be lowercase to work with the frontend --- src/remoteData.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/remoteData.js b/src/remoteData.js index 65cc125..a11f520 100644 --- a/src/remoteData.js +++ b/src/remoteData.js @@ -373,12 +373,15 @@ async function getDataTradeOgre(marketData, baseCurrency){ }) marketDataTradeOgreReturn.forEach(function(orderedMarketData){ - console.log(Object.keys(orderedMarketData)[0].replace('PIVX-','')) - console.log(Object.values(orderedMarketData)[0].price) - let key = Object.keys(orderedMarketData)[0].replace('PIVX-','') + let key = Object.keys(orderedMarketData)[0].replace('PIVX-','').toLowerCase() let price = Object.values(orderedMarketData)[0].price // Set the value to db tradeOgreReturnData.tradeOgre[key] = parseFloat(price) + + // Oracle frequently needs usd rather then usdt so if we have usdt use it as usd + if(Object.keys(orderedMarketData)[0].replace('PIVX-','').toLowerCase() == 'usdt'){ + tradeOgreReturnData.tradeOgre['usd'] = parseFloat(price) + } })