diff --git a/api/controllers/lotteryController.js b/api/controllers/lotteryController.js index ab446cc..199548c 100644 --- a/api/controllers/lotteryController.js +++ b/api/controllers/lotteryController.js @@ -139,6 +139,26 @@ const allLotteries = (req, res) => { }); }; +const latestLottery = (req, res) => { + return lotteryRepository + .latestLottery() + .then(lottery => + res.send({ + lottery, + message: "Latest lottery.", + success: true + }) + ) + .catch(error => { + const { statusCode, message } = error; + + return res.status(statusCode || 500).send({ + message: message || "Unexpected error occured while fetching all lotteries.", + success: false + }); + }); +}; + function verifyLotteryPayload(raffles, stolen, wines) { return new Promise((resolve, reject) => { if (raffles == undefined || !raffles instanceof Array) { @@ -188,5 +208,6 @@ module.exports = { drawWinner, archiveLottery, lotteryByDate, - allLotteries + allLotteries, + latestLottery }; diff --git a/api/lottery.js b/api/lottery.js index 6b1bf90..956e09f 100644 --- a/api/lottery.js +++ b/api/lottery.js @@ -130,6 +130,10 @@ const allLotteriesIncludingWinners = async (sort = "asc", yearFilter = undefined }); }; +const latestLottery = async () => { + return Lottery.findOne().sort({ date: -1 }); +}; + const drawWinner = async () => { let allContestants = await Attendee.find({ winner: false }); @@ -259,5 +263,6 @@ module.exports = { archive, lotteryByDate, allLotteries, - allLotteriesIncludingWinners + allLotteriesIncludingWinners, + latestLottery }; diff --git a/api/router.js b/api/router.js index 77e8661..a9cac58 100644 --- a/api/router.js +++ b/api/router.js @@ -71,6 +71,7 @@ router.delete("/lottery/winner/:id", mustBeAuthenticated, winnerController.delet router.get("/lottery/draw", mustBeAuthenticated, lotteryController.drawWinner); router.post("/lottery/archive", mustBeAuthenticated, lotteryController.archiveLottery); +router.get("/lottery/latest", lotteryController.latestLottery); router.get("/lottery/:epoch", lotteryController.lotteryByDate); router.get("/lotteries/", lotteryController.allLotteries); diff --git a/frontend/components/admin/archiveLotteryPage.vue b/frontend/components/admin/archiveLotteryPage.vue index e748687..724072d 100644 --- a/frontend/components/admin/archiveLotteryPage.vue +++ b/frontend/components/admin/archiveLotteryPage.vue @@ -67,7 +67,14 @@
@@ -81,6 +88,7 @@ export default { data() { return { payed: undefined, + todaysAlreadySubmitted: false, wines: [], winners: [], attendees: [], @@ -97,6 +105,7 @@ export default { this.fetchLotteryWines(); this.fetchLotteryWinners(); this.fetchLotteryAttendees(); + this.checkIfAlreadySubmittedForToday(); }, watch: { lotteryColors: { @@ -162,6 +171,19 @@ export default { } }); }, + checkIfAlreadySubmittedForToday() { + return fetch("/api/lottery/latest") + .then(resp => resp.json()) + .then(response => { + const getDay = d => new Date(d).getDate(); + + if (response.lottery.date && (getDay(response.lottery.date) == getDay(new Date()))) { + this.todaysAlreadySubmitted = true; + } else { + this.todaysAlreadySubmitted = false; + } + }) + }, updateLotteryColorsWithAttendees(attendees) { this.attendees.map(attendee => { this.lotteryColors.map(color => (color.value += attendee[color.key])); @@ -222,6 +244,7 @@ export default { .then(resp => resp.json()) .then(response => { if (response.success) { + this.todaysAlreadySubmitted = true; this.$toast.info({ title: "Lotteriet er sendt inn og arkivert! Du kan nå slette viner, deltakere & vinnere slettes.", timeout: 10000 @@ -278,6 +301,17 @@ select { } } +.info-message { + padding: 0.75rem; + text-align: center; + background-color: var(--light-blue); + color: var(--matte-text-color); + border-radius: 4px; + + font-size: 1.1rem; + line-height: 1.5rem; +} + .winner-element { display: flex; flex-direction: column;