From cf35cfd15d865c60f64dd6bbfed80e82c85651a1 Mon Sep 17 00:00:00 2001 From: sairaj mote Date: Thu, 11 Jan 2024 20:49:34 +0530 Subject: [PATCH] better docs --- index.js | 9 +++++++-- index.min.js | 2 +- test.rest | 10 +++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 627a5ff..5fe7d07 100644 --- a/index.js +++ b/index.js @@ -37,6 +37,9 @@ app.get("/", (req, res) => { font-size: 2rem; margin-bottom: 2rem; } + a{ + color: inherit; + } table { border-collapse: collapse; } @@ -74,7 +77,9 @@ app.get("/", (req, res) => { Available endpoints:

Query parameters: @@ -224,7 +229,7 @@ app.post("/price-history", async (req, res) => { 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 }); + const priceHistory = await PriceHistory.find({ date: { $in: dates } }, { _id: 0, __v: 0, asset: 0 }); res.json(priceHistory); } catch (err) { console.log(err); diff --git a/index.min.js b/index.min.js index 45bdcf4..bb9597f 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=3e3,HOST="0.0.0.0";app.use(express.json()),app.use(cors());const limiter=rateLimit({windowMs:6e4,max:20});app.use(limiter),mongoose.connect("mongodb://localhost/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
  • /price-history
  • \n
\n

\n Query parameters:\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ParameterRequiredDefaultformat | values
fromNoNoneYYYY-MM-DD
toNoNoneYYYY-MM-DD
onNoNoneYYYY-MM-DD
limitNo100all | <number>
assetNobtcbtc
currencyNoAllusd | inr
\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});res.json(priceHistory)}catch(err){console.log(err),res.status(500).json({error:err})}})),app.listen(3e3,HOST,(()=>{console.log(`Listening on ${HOST}:3000`)})),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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ParameterRequiredDefaultformat | values
fromNoNoneYYYY-MM-DD
toNoNoneYYYY-MM-DD
onNoNoneYYYY-MM-DD
limitNo100all | <number>
assetNobtcbtc
currencyNoAllusd | inr
\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(3e3,HOST,(()=>{console.log(`Listening on ${HOST}:3000`)})),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