Merge pull request #79 from KevinMidboe/fix/archive-but-save-if-chosen
fix: Archive but save set winners as winners
This commit is contained in:
		| @@ -33,7 +33,6 @@ const addWinnerWithWine = async (winner, wine) => { | ||||
|     wine: savedWine, | ||||
|     color: winner.color | ||||
|   }; | ||||
|  | ||||
|   if (exisitingWinner == undefined) { | ||||
|     const newWinner = new Winner({ | ||||
|       name: winner.name, | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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; | ||||
| @@ -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); | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user