If archiving a lottery, let archive-functionality circumvent SMS-service if the winners have been set on the archive page. - Also remove unused file
108 lines
2.9 KiB
JavaScript
108 lines
2.9 KiB
JavaScript
const path = require("path");
|
|
|
|
const VirtualWinner = require(path.join(__dirname, "/schemas/VirtualWinner"));
|
|
const { WinnerNotFound } = require(path.join(__dirname, "/vinlottisErrors"));
|
|
|
|
const redactWinnerInfoMapper = winner => {
|
|
return {
|
|
name: winner.name,
|
|
color: winner.color
|
|
};
|
|
};
|
|
|
|
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 => addWinner(winner))
|
|
);
|
|
};
|
|
|
|
const allWinners = (isAdmin = false) => {
|
|
const sortQuery = { timestamp_drawn: 1 };
|
|
|
|
if (!isAdmin) {
|
|
return VirtualWinner.find()
|
|
.sort(sortQuery)
|
|
.then(winners => winners.map(redactWinnerInfoMapper));
|
|
} else {
|
|
return VirtualWinner.find().sort(sortQuery);
|
|
}
|
|
};
|
|
|
|
const winnerById = (id, isAdmin = false) => {
|
|
return VirtualWinner.findOne({ id: id }).then(winner => {
|
|
if (winner == null) {
|
|
throw new WinnerNotFound();
|
|
}
|
|
|
|
if (!isAdmin) {
|
|
return redactWinnerInfoMapper(winner);
|
|
}
|
|
return winner;
|
|
});
|
|
};
|
|
|
|
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) {
|
|
throw new WinnerNotFound();
|
|
}
|
|
|
|
const updatedWinner = {
|
|
name: updateModel.name != null ? updateModel.name : winner.name,
|
|
phoneNumber: updateModel.phoneNumber != null ? updateModel.phoneNumber : winner.phoneNumber,
|
|
red: updateModel.red != null ? updateModel.red : winner.red,
|
|
green: updateModel.green != null ? updateModel.green : winner.green,
|
|
blue: updateModel.blue != null ? updateModel.blue : winner.blue,
|
|
yellow: updateModel.yellow != null ? updateModel.yellow : winner.yellow,
|
|
timestamp_drawn: updateModel.timestamp_drawn != null ? updateModel.timestamp_drawn : winner.timestamp_drawn,
|
|
timestamp_limit: updateModel.timestamp_limit != null ? updateModel.timestamp_limit : winner.timestamp_limit,
|
|
timestamp_sent: updateModel.timestamp_sent != null ? updateModel.timestamp_sent : winner.timestamp_sent
|
|
};
|
|
|
|
return VirtualWinner.updateOne({ id: id }, updatedWinner).then(_ => updatedWinner);
|
|
});
|
|
};
|
|
|
|
const deleteWinnerById = id => {
|
|
return VirtualWinner.findOne({ id: id }).then(winner => {
|
|
if (winner == null) {
|
|
throw new WinnerNotFound();
|
|
}
|
|
|
|
return VirtualWinner.deleteOne({ id: id }).then(_ => winner);
|
|
});
|
|
};
|
|
|
|
const deleteWinners = () => {
|
|
return VirtualWinner.deleteMany();
|
|
};
|
|
|
|
module.exports = {
|
|
addWinner,
|
|
addWinners,
|
|
allWinners,
|
|
winnerById,
|
|
updateWinnerById,
|
|
deleteWinnerById,
|
|
deleteWinners,
|
|
setWinnerChosenById
|
|
};
|