const subDays = require("date-fns/sub_days"); const startOfDay = require("date-fns/start_of_day"); const startOfSecond = require("date-fns/start_of_second"); const StatsAPI = require("../StatsAPI"); function showStats(req, res) { let since, until; switch (req.query.period) { case "last-day": until = startOfDay(new Date()); since = subDays(until, 1); break; case "last-week": until = startOfDay(new Date()); since = subDays(until, 7); break; case "last-month": until = startOfDay(new Date()); since = subDays(until, 30); break; default: until = req.query.until ? new Date(req.query.until) : startOfSecond(new Date()); since = new Date(req.query.since); } if (isNaN(since.getTime())) { return res.status(403).send({ error: "?since is not a valid date" }); } if (isNaN(until.getTime())) { return res.status(403).send({ error: "?until is not a valid date" }); } if (until <= since) { return res .status(403) .send({ error: "?until date must come after ?since date" }); } if (until >= new Date()) { return res.status(403).send({ error: "?until must be a date in the past" }); } StatsAPI.getStats(since, until).then( stats => { res .set({ "Cache-Control": "public, max-age=60", "Cache-Tag": "stats" }) .send(stats); }, error => { console.error(error); res.status(500).send({ error: "Unable to fetch stats" }); } ); } module.exports = showStats;