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
|
|
};
|