diff --git a/index.js b/index.js
index 445fb4b..fc68bf7 100644
--- a/index.js
+++ b/index.js
@@ -168,22 +168,15 @@ function loadHistoricToDb() {
inr: parseFloat(parseFloat(close2).toFixed(2)),
});
}
+ // update many
+ await PriceHistory.deleteMany({ asset: 'btc' });
await PriceHistory.insertMany(priceHistoryData);
})
.catch((err) => {
console.log(err);
})
}
-// run loadHistoricToDb() only once when the server starts and no data is present in the database
-PriceHistory.countDocuments()
- .then((count) => {
- if (count === 0) {
- loadHistoricToDb();
- }
- })
- .catch((err) => {
- console.log(err);
- })
+loadHistoricToDb();
app.get("/price-history", async (req, res) => {
try {
@@ -240,7 +233,7 @@ app.post("/price-history", async (req, res) => {
app.listen(PORT, HOST, () => {
console.log(`Listening on ${HOST}:${PORT}`);
});
-cron.schedule('0 12 * * *', async () => {
+cron.schedule('0 */4 * * *', async () => {
try {
// will return a csv file
const [usd, inr] = await Promise.all([
diff --git a/index.min.js b/index.min.js
index 796d085..c002b77 100644
--- a/index.min.js
+++ b/index.min.js
@@ -1 +1 @@
-require("dotenv").config();const express=require("express"),mongoose=require("mongoose"),cors=require("cors"),cron=require("node-cron"),rateLimit=require("express-rate-limit"),app=express(),PORT=process.env.PORT||3e3,HOST=process.env.HOST||"127.0.0.1";app.use(express.json()),app.use(cors());const limiter=rateLimit({windowMs:6e4,max:20});app.use(limiter),mongoose.connect(`mongodb://${HOST}/price-history`);const db=mongoose.connection;db.on("error",console.error.bind(console,"connection error:")),db.once("open",(()=>{console.log("Connected to MongoDB")})),app.get("/",((req,res)=>{res.send('\n
RanchiMall Price History API\n \n \n \n \n Welcome to the RanchiMall Price History API!\n
\n \n Available endpoints:\n
\n \n \n Query parameters:\n
\n \n \n \n | Parameter | \n Required | \n Default | \n format | values | \n
\n \n \n \n | from | \n No | \n None | \n YYYY-MM-DD | \n
\n \n | to | \n No | \n None | \n YYYY-MM-DD | \n
\n \n | on | \n No | \n None | \n YYYY-MM-DD | \n
\n \n | limit | \n No | \n 100 | \n all | <number> | \n
\n \n | asset | \n No | \n btc | \n btc | \n
\n \n | currency | \n No | \n All | \n usd | inr | \n
\n \n
\n \n Example:\n
\n \n - \n
\n /price-history?from=2020-01-01&to=2020-01-31\n \n \n
\n \n ')}));const PriceHistory=require("./models/price-history");function loadHistoricToDb(){const now=parseInt(Date.now()/1e3);Promise.all([fetch(`https://query1.finance.yahoo.com/v7/finance/download/BTC-USD?period1=1410912000&period2=${now}&interval=1d&events=history&includeAdjustedClose=true`).then((res=>res.text())),fetch(`https://query1.finance.yahoo.com/v7/finance/download/BTC-INR?period1=1410912000&period2=${now}&interval=1d&events=history&includeAdjustedClose=true`).then((res=>res.text()))]).then((async([usd,inr])=>{const usdData=usd.split("\n").slice(1),inrData=inr.split("\n").slice(1),priceHistoryData=[];for(let i=0;i{console.log(err)}))}PriceHistory.countDocuments().then((count=>{0===count&&loadHistoricToDb()})).catch((err=>{console.log(err)})),app.get("/price-history",(async(req,res)=>{try{const{from:from,to:to,on:on,limit:limit=100,asset:asset="btc",currency:currency}=req.query,searchParams={asset:asset};from&&(searchParams.date={$gte:new Date(from).getTime()}),to&&(searchParams.date={...searchParams.date,$lte:new Date(to).getTime()}),on&&(searchParams.date={$eq:new Date(on).getTime()}),currency&&(searchParams[currency]={$exists:!0});const dataFormat={_id:0,__v:0,asset:0};"inr"===currency&&(dataFormat.usd=0),"usd"===currency&&(dataFormat.inr=0);const priceHistory=await PriceHistory.find(searchParams,dataFormat).sort({date:-1}).limit("all"===limit?0:parseInt(limit));res.json(priceHistory)}catch(err){console.log(err),res.status(500).json({error:err})}})),app.post("/price-history",(async(req,res)=>{try{const{dates:dates}=req.body;if(!dates)return res.status(400).json({error:"dates is required"});if(!Array.isArray(dates))return res.status(400).json({error:"dates must be an array"});const priceHistory=await PriceHistory.find({date:{$in:dates}},{_id:0,__v:0,asset:0});res.json(priceHistory)}catch(err){console.log(err),res.status(500).json({error:err})}})),app.listen(PORT,HOST,(()=>{console.log(`Listening on ${HOST}:${PORT}`)})),cron.schedule("0 12 * * *",(async()=>{try{const[usd,inr]=await Promise.all([fetch("https://query1.finance.yahoo.com/v7/finance/download/BTC-USD").then((res=>res.text())),fetch("https://query1.finance.yahoo.com/v7/finance/download/BTC-INR").then((res=>res.text()))]),usdData=usd.split("\n").slice(1),inrData=inr.split("\n").slice(1);for(let i=0;i{console.log("Connected to MongoDB")})),app.get("/",((req,res)=>{res.send('\n RanchiMall Price History API\n \n \n \n \n Welcome to the RanchiMall Price History API!\n
\n \n Available endpoints:\n
\n \n \n Query parameters:\n
\n \n \n \n | Parameter | \n Required | \n Default | \n format | values | \n
\n \n \n \n | from | \n No | \n None | \n YYYY-MM-DD | \n
\n \n | to | \n No | \n None | \n YYYY-MM-DD | \n
\n \n | on | \n No | \n None | \n YYYY-MM-DD | \n
\n \n | limit | \n No | \n 100 | \n all | <number> | \n
\n \n | asset | \n No | \n btc | \n btc | \n
\n \n | currency | \n No | \n All | \n usd | inr | \n
\n \n
\n \n Example:\n
\n \n - \n
\n /price-history?from=2020-01-01&to=2020-01-31\n \n \n
\n \n ')}));const PriceHistory=require("./models/price-history");function loadHistoricToDb(){const now=parseInt(Date.now()/1e3);Promise.all([fetch(`https://query1.finance.yahoo.com/v7/finance/download/BTC-USD?period1=1410912000&period2=${now}&interval=1d&events=history&includeAdjustedClose=true`).then((res=>res.text())),fetch(`https://query1.finance.yahoo.com/v7/finance/download/BTC-INR?period1=1410912000&period2=${now}&interval=1d&events=history&includeAdjustedClose=true`).then((res=>res.text()))]).then((async([usd,inr])=>{const usdData=usd.split("\n").slice(1),inrData=inr.split("\n").slice(1),priceHistoryData=[];for(let i=0;i{console.log(err)}))}loadHistoricToDb(),app.get("/price-history",(async(req,res)=>{try{const{from:from,to:to,on:on,limit:limit=100,asset:asset="btc",currency:currency}=req.query,searchParams={asset:asset};from&&(searchParams.date={$gte:new Date(from).getTime()}),to&&(searchParams.date={...searchParams.date,$lte:new Date(to).getTime()}),on&&(searchParams.date={$eq:new Date(on).getTime()}),currency&&(searchParams[currency]={$exists:!0});const dataFormat={_id:0,__v:0,asset:0};"inr"===currency&&(dataFormat.usd=0),"usd"===currency&&(dataFormat.inr=0);const priceHistory=await PriceHistory.find(searchParams,dataFormat).sort({date:-1}).limit("all"===limit?0:parseInt(limit));res.json(priceHistory)}catch(err){console.log(err),res.status(500).json({error:err})}})),app.post("/price-history",(async(req,res)=>{try{const{dates:dates}=req.body;if(!dates)return res.status(400).json({error:"dates is required"});if(!Array.isArray(dates))return res.status(400).json({error:"dates must be an array"});const priceHistory=await PriceHistory.find({date:{$in:dates}},{_id:0,__v:0,asset:0});res.json(priceHistory)}catch(err){console.log(err),res.status(500).json({error:err})}})),app.listen(PORT,HOST,(()=>{console.log(`Listening on ${HOST}:${PORT}`)})),cron.schedule("0 */4 * * *",(async()=>{try{const[usd,inr]=await Promise.all([fetch("https://query1.finance.yahoo.com/v7/finance/download/BTC-USD").then((res=>res.text())),fetch("https://query1.finance.yahoo.com/v7/finance/download/BTC-INR").then((res=>res.text()))]),usdData=usd.split("\n").slice(1),inrData=inr.split("\n").slice(1);for(let i=0;i