diff --git a/api/history.js b/api/history.js index 46195ce..3542c3d 100644 --- a/api/history.js +++ b/api/history.js @@ -33,7 +33,6 @@ const addWinnerWithWine = async (winner, wine) => { wine: savedWine, color: winner.color }; - if (exisitingWinner == undefined) { const newWinner = new Winner({ name: winner.name, diff --git a/api/lottery.js b/api/lottery.js index 956e09f..c1625e6 100644 --- a/api/lottery.js +++ b/api/lottery.js @@ -5,10 +5,13 @@ const Attendee = require(path.join(__dirname, "/schemas/Attendee")); const PreLotteryWine = require(path.join(__dirname, "/schemas/PreLotteryWine")); const VirtualWinner = require(path.join(__dirname, "/schemas/VirtualWinner")); const Lottery = require(path.join(__dirname, "/schemas/Purchase")); +const { WineNotFound } = require(path.join(__dirname, "/vinlottisErrors")); const Message = require(path.join(__dirname, "/message")); const historyRepository = require(path.join(__dirname, "/history")); const wineRepository = require(path.join(__dirname, "/wine")); +const winnerRepository = require(path.join(__dirname, "/winner")); +const prelotteryWineRepository = require(path.join(__dirname, "/prelotteryWine")); const { WinnerNotFound, @@ -17,11 +20,36 @@ const { LotteryByDateNotFound } = require(path.join(__dirname, "/vinlottisErrors")); +const moveUnfoundPrelotteryWineToWines = async (error, tempWine) => { + if(!(error instanceof WineNotFound)) { + throw error + } + + if(!tempWine.winner) { + throw new WinnerNotFound() + } + + const prelotteryWine = await prelotteryWineRepository.wineById(tempWine._id); + const winner = await winnerRepository.winnerById(tempWine.winner.id, true); + + return wineRepository + .addWine(prelotteryWine) + .then(_ => prelotteryWineRepository.addWinnerToWine(prelotteryWine, winner)) // prelotteryWine.deleteById + .then(_ => historyRepository.addWinnerWithWine(winner, prelotteryWine)) + .then(_ => winnerRepository.setWinnerChosenById(winner.id)) +} + const archive = (date, raffles, stolen, wines) => { const { blue, red, yellow, green } = raffles; const bought = blue + red + yellow + green; - return Promise.all(wines.map(wine => wineRepository.findWine(wine))).then(resolvedWines => { + return Promise.all( + wines.map(wine => wineRepository + .findWine(wine) + .catch(error => moveUnfoundPrelotteryWineToWines(error, wine) + .then(_ => wineRepository.findWine(wine)) + )) + ).then(resolvedWines => { const lottery = new Lottery({ date, blue, diff --git a/api/person.js b/api/person.js deleted file mode 100644 index 03aee27..0000000 --- a/api/person.js +++ /dev/null @@ -1,35 +0,0 @@ -const path = require("path"); -const Highscore = require(path.join(__dirname, "/schemas/Highscore")); - -async function findSavePerson(foundWinner, wonWine, date) { - let person = await Highscore.findOne({ - name: foundWinner.name - }); - - if (person == undefined) { - let newPerson = new Highscore({ - name: foundWinner.name, - wins: [ - { - color: foundWinner.color, - date: date, - wine: wonWine - } - ] - }); - - await newPerson.save(); - } else { - person.wins.push({ - color: foundWinner.color, - date: date, - wine: wonWine - }); - person.markModified("wins"); - await person.save(); - } - - return person; -} - -module.exports.findSavePerson = findSavePerson; diff --git a/api/router.js b/api/router.js index a9cac58..cf7a337 100644 --- a/api/router.js +++ b/api/router.js @@ -87,6 +87,9 @@ router.get("/chat/history", chatController.getAllHistory); router.delete("/chat/history", mustBeAuthenticated, chatController.deleteHistory); router.post("/login", userController.login); + +// We should have a check here if we are dev/prod, +// and disable the mustBeAuthentacted for the register router.post("/register", mustBeAuthenticated, userController.register); router.get("/logout", userController.logout); diff --git a/api/winner.js b/api/winner.js index 85514ed..c937efe 100644 --- a/api/winner.js +++ b/api/winner.js @@ -10,17 +10,19 @@ const redactWinnerInfoMapper = winner => { }; }; +const addWinner = winner => { + let newWinner = new VirtualWinner({ + name: winner.name, + color: winner.color, + timestamp_drawn: new Date().getTime() + }); + + return newWinner.save() +} + const addWinners = winners => { return Promise.all( - winners.map(winner => { - let newWinnerElement = new VirtualWinner({ - name: winner.name, - color: winner.color, - timestamp_drawn: new Date().getTime() - }); - - return newWinnerElement.save(); - }) + winners.map(winner => addWinner(winner)) ); }; @@ -49,6 +51,14 @@ const winnerById = (id, isAdmin = false) => { }); }; +const setWinnerChosenById = (id) => { + return VirtualWinner.findOne({id: id}).then(winner => { + winner.prize_selected = true + winner.markModified("wins") + return winner.save() + }) +} + const updateWinnerById = (id, updateModel) => { return VirtualWinner.findOne({ id: id }).then(winner => { if (winner == null) { @@ -86,10 +96,12 @@ const deleteWinners = () => { }; module.exports = { + addWinner, addWinners, allWinners, winnerById, updateWinnerById, deleteWinnerById, - deleteWinners + deleteWinners, + setWinnerChosenById }; diff --git a/server.js b/server.js index 10a451f..408909f 100644 --- a/server.js +++ b/server.js @@ -95,3 +95,4 @@ app.use("/subscription", subscriptionApi); app.use("/", (req, res) => res.sendFile(path.join(__dirname + "/public/dist/index.html"))); server.listen(30030); +console.log("Server listening on :30030")