Add winners manually by posting /lottery/winners.
This commit is contained in:
@@ -1,8 +1,62 @@
|
||||
const path = require("path");
|
||||
const lotteryRepository = require(path.join(__dirname, "../lottery"));
|
||||
|
||||
const addWinners = (req, res) => {
|
||||
const { winners } = req.body;
|
||||
|
||||
if (!(winners instanceof Array)) {
|
||||
return res.status(400).send({
|
||||
message: "Winners must be array.",
|
||||
success: false
|
||||
});
|
||||
}
|
||||
|
||||
const requiredAttributes = ["name", "color"];
|
||||
const validColors = ["red", "blue", "green", "yellow"];
|
||||
const validateAllWinners = winners =>
|
||||
winners.map(winner => {
|
||||
return Promise.all(
|
||||
requiredAttributes.map(attr => {
|
||||
if (typeof winner[attr] === "undefined") {
|
||||
return Promise.reject({
|
||||
message: `Incorrect or missing attribute: ${attr}.`,
|
||||
statusCode: 400
|
||||
});
|
||||
}
|
||||
|
||||
if (!validColors.includes(winner.color)) {
|
||||
return Promise.reject({
|
||||
message: `Missing or incorrect color value, must have one of values: ${validColors.join(", ")}.`,
|
||||
statusCode: 400
|
||||
});
|
||||
}
|
||||
|
||||
return Promise.resolve();
|
||||
})
|
||||
).then(_ => Promise.resolve(winner));
|
||||
});
|
||||
|
||||
return Promise.all(validateAllWinners(winners))
|
||||
.then(winners => lotteryRepository.addWinners(winners))
|
||||
.then(winners =>
|
||||
res.send({
|
||||
winners: winners,
|
||||
message: `Successfully added winners to lottery.`,
|
||||
success: true
|
||||
})
|
||||
)
|
||||
.catch(error => {
|
||||
const { statusCode, message } = error;
|
||||
|
||||
return res.status(statusCode || 500).send({
|
||||
message: message || "Unexpected error occured adding winners.",
|
||||
success: false
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const allWinners = (req, res) => {
|
||||
const isAdmin = req.isAuthenticated() || true;
|
||||
const isAdmin = req.isAuthenticated();
|
||||
|
||||
return lotteryRepository
|
||||
.allWinners(isAdmin)
|
||||
@@ -94,6 +148,7 @@ const deleteWinners = (req, res) => {
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
addWinners,
|
||||
allWinners,
|
||||
winnerById,
|
||||
deleteWinnerById,
|
||||
|
||||
@@ -189,7 +189,21 @@ const deleteWines = () => {
|
||||
return PreLotteryWine.deleteMany();
|
||||
};
|
||||
|
||||
const allWinners = isAdmin => {
|
||||
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();
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
const allWinners = (isAdmin = false) => {
|
||||
if (!isAdmin) {
|
||||
return VirtualWinner.find().then(winners => winners.map(redactWinnerInfoMapper));
|
||||
} else {
|
||||
@@ -360,6 +374,7 @@ module.exports = {
|
||||
updateWineById,
|
||||
deleteWineById,
|
||||
deleteWines,
|
||||
addWinners,
|
||||
allWinners,
|
||||
winnerById,
|
||||
deleteWinnerById,
|
||||
|
||||
Reference in New Issue
Block a user