diff --git a/src/app.js b/src/app.js index aacc8fc..ff5be0f 100644 --- a/src/app.js +++ b/src/app.js @@ -8,6 +8,7 @@ const { CodeRoute } = require("./routes/CodeRoute"); const { VerifyRoute } = require("./routes/VerifyRoute"); const { corsOpts, sessionOpts } = require("./session"); const { TelegramWebhookRoute } = require("./routes/TelegramWebhookRoute"); +const { CovidRoute } = require("./routes/CovidRoute"); console.log(`Node Environment: ${process.env.NODE_ENV}`); @@ -21,6 +22,7 @@ app.post(`/${process.env.TELEGRAM_SECRET}`, TelegramWebhookRoute); app.post("/login", LoginRoute); app.get("/code", CodeRoute); app.post("/verify", VerifyRoute); +app.post("/covid", CovidRoute); const port = process.env.PORT || 8080; app.listen(port, () => { diff --git a/src/db/db.js b/src/db/db.js index 88f3469..4a6048e 100644 --- a/src/db/db.js +++ b/src/db/db.js @@ -63,6 +63,9 @@ const User = sequelize.define("User", { isInfected: { type: DataTypes.BOOLEAN, }, + infectionDate: { + type: DataTypes.DATE, + } }); Contact.sync(); diff --git a/src/routes/CovidRoute.js b/src/routes/CovidRoute.js new file mode 100644 index 0000000..b36cf5d --- /dev/null +++ b/src/routes/CovidRoute.js @@ -0,0 +1,61 @@ +const { User } = require("../db/db"); + +function CovidRoute(req, res){ + if(!req.session.user){ + res.status(401).send("Not logged in"); + return; + } + + console.log(`SetPositive: ${req.body.setPositive}`); + + if(req.body.setPositive){ + setUserCovidPositive(req.session.user, true, response=>{ + res.send({covidPositive: response}); + }); + }else{ + getUserCovidPositivity(req.session.user, (success, positivity)=>{ + res.status(success ? 200 : 400).send({covidPositive: positivity}); + }); + } +} + +function getUserCovidPositivity(telegramID, callback){ + User.findOne({ + where: {telegram: telegramID}, + }) + .then(user=>{ + if(user){ + const infectionDuration = user.infectionDate - Date.now(); + if(infectionDuration > 60 * 60 * 24 * 14){ + setUserCovidPositive(telegramID, false, res=>{ + callback(res, res ? false : null); + }); + }else{ + callback(true, user.isInfected); + } + }else{ + callback(false, null); + } + }) + .catch(()=>{ + callback(false, null); + }) +} + +function setUserCovidPositive(telegramID, infectionState, callback){ + User.findOne({ + where: {telegram: telegramID}, + }) + .then(user=>{ + if(user){ + user.isInfected = infectionState; + user.infectionDate = Date.now(); + user.save().then(()=>callback(true)).catch(()=>callback(false)); + }else{ + callback(false); + } + }) + .catch(()=>callback(false)); +} + +exports.CovidRoute = CovidRoute; \ No newline at end of file