105 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const path = require("path");
 | |
| 
 | |
| const prizeDistribution = require(path.join(__dirname, "../prizeDistribution"));
 | |
| const prelotteryWineRepository = require(path.join(__dirname, "../prelotteryWine"));
 | |
| const winnerRepository = require(path.join(__dirname, "../winner"));
 | |
| const message = require(path.join(__dirname, "../message"));
 | |
| 
 | |
| const start = async (req, res) => {
 | |
|   const allWinners = await winnerRepository.allWinners(true);
 | |
|   if (allWinners.length === 0) {
 | |
|     return res.status(503).send({
 | |
|       message: "No winners found to distribute prizes to.",
 | |
|       success: false
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   const laterWinners = allWinners.slice(1);
 | |
| 
 | |
|   return prizeDistribution
 | |
|     .notifyNextWinner()
 | |
|     .then(_ => message.sendInitialMessageToWinners(laterWinners))
 | |
|     .then(_ =>
 | |
|       res.send({
 | |
|         message: `Send link to first winner and notified everyone else.`,
 | |
|         success: true
 | |
|       })
 | |
|     )
 | |
|     .catch(error => {
 | |
|       const { statusCode, message } = error;
 | |
| 
 | |
|       return res.status(statusCode || 500).send({
 | |
|         message: message || "Unexpected error occured while starting prize distribution.",
 | |
|         success: false
 | |
|       });
 | |
|     });
 | |
| };
 | |
| 
 | |
| const getPrizesForWinnerById = (req, res) => {
 | |
|   const { id } = req.params;
 | |
| 
 | |
|   return prizeDistribution
 | |
|     .verifyWinnerNextInLine(id)
 | |
|     .then(winner => {
 | |
|       return prelotteryWineRepository.allWinesWithoutWinner().then(wines => [wines, winner]);
 | |
|     })
 | |
|     .then(([wines, winner]) =>
 | |
|       res.send({
 | |
|         wines: wines,
 | |
|         winner: winner,
 | |
|         message: "Wines to select from",
 | |
|         success: true
 | |
|       })
 | |
|     )
 | |
|     .catch(error => {
 | |
|       const { statusCode, message } = error;
 | |
| 
 | |
|       return res.status(statusCode || 500).send({
 | |
|         message: message || "Unexpected error occured while fetching prizes.",
 | |
|         success: false
 | |
|       });
 | |
|     });
 | |
| };
 | |
| 
 | |
| const submitPrizeForWinnerById = async (req, res) => {
 | |
|   const { id } = req.params;
 | |
|   const { wine } = req.body;
 | |
| 
 | |
|   let prelotteryWine, winner;
 | |
|   try {
 | |
|     prelotteryWine = await prelotteryWineRepository.wineById(wine._id);
 | |
|     winner = await winnerRepository.winnerById(id, true);
 | |
|   } catch (error) {
 | |
|     const { statusCode, message } = error;
 | |
| 
 | |
|     return res.status(statusCode || 500).send({
 | |
|       message: message || "Unexpected error occured while claiming prize.",
 | |
|       success: false
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   return prizeDistribution
 | |
|     .claimPrize(prelotteryWine, winner)
 | |
|     .then(_ => prizeDistribution.notifyNextWinner())
 | |
|     .then(_ =>
 | |
|       res.send({
 | |
|         message: `${winner.name} successfully claimed prize: ${prelotteryWine.name}`,
 | |
|         success: true
 | |
|       })
 | |
|     )
 | |
|     .catch(error => {
 | |
|       const { statusCode, message } = error;
 | |
| 
 | |
|       return res.status(statusCode || 500).send({
 | |
|         message: message || "Unexpected error occured while claiming prize.",
 | |
|         success: false
 | |
|       });
 | |
|     });
 | |
| };
 | |
| 
 | |
| module.exports = {
 | |
|   start,
 | |
|   getPrizesForWinnerById,
 | |
|   submitPrizeForWinnerById
 | |
| };
 |