diff --git a/api/message.js b/api/message.js index b07a69c..d4037de 100644 --- a/api/message.js +++ b/api/message.js @@ -3,7 +3,6 @@ const path = require("path"); const config = require(path.join(__dirname + "/../config/defaults/lottery")); async function sendMessage(winnerObject) { - console.log("sent message to ", winnerObject); winnerObject.timestamp_sent = new Date().getTime(); winnerObject.timestamp_limit = new Date().getTime() * 600000; await winnerObject.save(); @@ -16,6 +15,22 @@ async function sendMessage(winnerObject) { return true; } +async function sendWonWineMessage(winnerObject, wineObject) { + console.log( + `User ${winnerObject.id} is only one left, chosing wine for him/her.` + ); + winnerObject.timestamp_sent = new Date().getTime(); + winnerObject.timestamp_limit = new Date().getTime(); + await winnerObject.save(); + + await sendMessageToUser( + winnerObject.phoneNumber, + `Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Du har vunnet vinen ${wineObject.name}, og vil få nærmere info om hvordan/hvor du kan hente vinen snarest. Ha en ellers fin helg!` + ); + + return true; +} + async function sendMessageTooLate(winnerObject) { await sendMessageToUser( winnerObject.phoneNumber, @@ -24,9 +39,6 @@ async function sendMessageTooLate(winnerObject) { } async function sendMessageToUser(phoneNumber, message) { - console.log("num", phoneNumber); - console.log("message", message); - request.post( { url: `https://gatewayapi.com/rest/mtsms?token=${config.token}`, @@ -68,3 +80,4 @@ async function sendUpdate(winners) { module.exports.sendUpdate = sendUpdate; module.exports.sendMessage = sendMessage; module.exports.sendMessageTooLate = sendMessageTooLate; +module.exports.sendWonWineMessage = sendWonWineMessage; diff --git a/api/virtualRegistration.js b/api/virtualRegistration.js index 9a9bb03..91f3758 100644 --- a/api/virtualRegistration.js +++ b/api/virtualRegistration.js @@ -8,7 +8,6 @@ mongoose.connect("mongodb://localhost:27017/vinlottis", { }); const Message = require(path.join(__dirname + "/../api/message")); -const config = require(path.join(__dirname + "/../config/defaults/push")); const VirtualWinner = require(path.join( __dirname + "/../schemas/VirtualWinner" )); @@ -17,9 +16,6 @@ const Wine = require(path.join(__dirname + "/../schemas/Wine")); const PreLotteryWine = require(path.join( __dirname + "/../schemas/PreLotteryWine" )); -const lotteryConfig = require(path.join( - __dirname + "/../config/defaults/lottery" -)); router.use((req, res, next) => { next(); @@ -31,7 +27,6 @@ router.route("/winner/:id").get((req, res) => { router.route("/:id").get(async (req, res) => { let id = req.params.id; - let foundWinner = await VirtualWinner.findOne({ id: id }); if (!foundWinner) { @@ -80,6 +75,7 @@ router.route("/:id").post(async (req, res) => { return; } let date = new Date(); + date.setHours(5, 0, 0, 0); let prelotteryWine = await PreLotteryWine.findOne({ name: wineName }); @@ -140,33 +136,99 @@ router.route("/:id").post(async (req, res) => { await foundWinner.delete(); + let prelotteryWine = await PreLotteryWine.find(); let nextWinner = await VirtualWinner.find().sort({ timestamp_drawn: 1 }); - if (nextWinner.length > 0) { + if (nextWinner.length > 1 && prelotteryWine.length > 1) { Message.sendMessage(nextWinner[0]); + startTimeout(id); + } else if (nextWinner.length == 1 && prelotteryWine.length == 1) { + chooseForUser(nextWinner[0], prelotteryWine[0]); } - startTimeout(id); - res.json({ success: true }); return; }); +async function chooseForUser(winner, prelotteryWine) { + let date = new Date(); + date.setHours(5, 0, 0, 0); + let wonWine = await Wine.findOne({ name: prelotteryWine.name }); + if (wonWine == undefined) { + let newWonWine = new Wine({ + name: prelotteryWine.name, + vivinoLink: prelotteryWine.vivinoLink, + rating: prelotteryWine.rating, + occurences: 1, + image: prelotteryWine.image, + id: prelotteryWine.id + }); + await newWonWine.save(); + wonWine = newWonWine; + } else { + wonWine.occurences += 1; + wonWine.image = prelotteryWine.image; + wonWine.id = prelotteryWine.id; + await wonWine.save(); + } + + const person = await Highscore.findOne({ + name: winner.name + }); + + if (person == undefined) { + let newPerson = new Highscore({ + name: winner.name, + wins: [ + { + color: winner.color, + date: date, + wine: wonWine + } + ] + }); + + await newPerson.save(); + } else { + person.wins.push({ + color: winner.color, + date: date, + wine: wonWine + }); + person.markModified("wins"); + await person.save(); + } + + await prelotteryWine.delete(); + Message.sendWonWineMessage(winner, prelotteryWine); +} + function startTimeout(id) { + console.log(`Starting timeout for user ${id}.`); setTimeout(async () => { let virtualWinner = await VirtualWinner.findOne({ id: id }); if (!virtualWinner) { + console.log( + `Timeout done for user ${id}, but user has already sent data.` + ); return; } + console.log(`Timeout done for user ${id}, sending update to user.`); Message.sendMessageTooLate(virtualWinner); - virtualWinner.timestamp_drawn; + virtualWinner.timestamp_drawn = new Date().getTime(); virtualWinner.timestamp_limit = null; virtualWinner.timestamp_sent = null; await virtualWinner.save(); + + let prelotteryWine = await PreLotteryWine.find(); + let nextWinner = await VirtualWinner.find().sort({ timestamp_drawn: 1 }); + if (nextWinner.length == 1 && prelotteryWine.length == 1) { + chooseForUser(nextWinner[0], prelotteryWine[0]); + } }, 600000); }