Get including winners, filter by year and sort.
Separate function for getting all history including the winners object. Both have sort parameter that is used within the mongo query instead of doing it in javascript.
This commit is contained in:
@@ -7,6 +7,9 @@ const VirtualWinner = require(path.join(__dirname, "/schemas/VirtualWinner"));
|
||||
const Lottery = require(path.join(__dirname, "/schemas/Purchase"));
|
||||
|
||||
const Message = require(path.join(__dirname, "/message"));
|
||||
const historyRepository = require(path.join(__dirname, "/history"));
|
||||
const wineRepository = require(path.join(__dirname, "/wine"));
|
||||
|
||||
const {
|
||||
WinnerNotFound,
|
||||
NoMoreAttendeesToWin,
|
||||
@@ -17,11 +20,9 @@ const {
|
||||
const archive = (date, raffles, stolen, wines) => {
|
||||
const { blue, red, yellow, green } = raffles;
|
||||
const bought = blue + red + yellow + green;
|
||||
date = date.setHours(0, 0, 0, 0);
|
||||
|
||||
return Lottery.findOneAndUpdate(
|
||||
{ date },
|
||||
{
|
||||
return Promise.all(wines.map(wine => wineRepository.findWine(wine))).then(resolvedWines => {
|
||||
const lottery = new Lottery({
|
||||
date,
|
||||
blue,
|
||||
red,
|
||||
@@ -29,10 +30,11 @@ const archive = (date, raffles, stolen, wines) => {
|
||||
green,
|
||||
bought,
|
||||
stolen,
|
||||
wines
|
||||
},
|
||||
{ upsert: true }
|
||||
);
|
||||
wines: resolvedWines
|
||||
});
|
||||
|
||||
return lottery.save();
|
||||
});
|
||||
};
|
||||
|
||||
const lotteryByDate = date => {
|
||||
@@ -67,10 +69,65 @@ const lotteryByDate = date => {
|
||||
});
|
||||
};
|
||||
|
||||
const allLotteries = () => {
|
||||
return Lottery.find()
|
||||
.select("-_id -__v")
|
||||
.populate("wines");
|
||||
const allLotteries = (sort = "asc", yearFilter = undefined) => {
|
||||
const sortDirection = sort == "asc" ? 1 : -1;
|
||||
|
||||
let startQueryDate = new Date("1970-01-01");
|
||||
let endQueryDate = new Date("2999-01-01");
|
||||
if (yearFilter) {
|
||||
startQueryDate = new Date(`${yearFilter}-01-01`);
|
||||
endQueryDate = new Date(`${Number(yearFilter) + 1}-01-01`);
|
||||
}
|
||||
|
||||
const query = [
|
||||
{
|
||||
$match: {
|
||||
date: {
|
||||
$gte: startQueryDate,
|
||||
$lte: endQueryDate
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
date: sortDirection
|
||||
}
|
||||
},
|
||||
{
|
||||
$unset: ["_id", "__v"]
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: "wines",
|
||||
localField: "wines",
|
||||
foreignField: "_id",
|
||||
as: "wines"
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
return Lottery.aggregate(query);
|
||||
};
|
||||
|
||||
const allLotteriesIncludingWinners = async (sort = "asc", yearFilter = undefined) => {
|
||||
const lotteries = await allLotteries(sort, yearFilter);
|
||||
const allWinners = await historyRepository.groupByDate(false, sort);
|
||||
|
||||
return lotteries.map(lottery => {
|
||||
const { winners } = allWinners.pop();
|
||||
|
||||
return {
|
||||
wines: lottery.wines,
|
||||
date: lottery.date,
|
||||
blue: lottery.blue,
|
||||
green: lottery.green,
|
||||
yellow: lottery.yellow,
|
||||
red: lottery.red,
|
||||
bought: lottery.bought,
|
||||
stolen: lottery.stolen,
|
||||
winners: winners
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
const drawWinner = async () => {
|
||||
@@ -140,10 +197,6 @@ const drawWinner = async () => {
|
||||
|
||||
let winner = attendeeListDemocratic[Math.floor(Math.random() * attendeeListDemocratic.length)];
|
||||
|
||||
let winners = await VirtualWinner.find({ timestamp_sent: undefined }).sort({
|
||||
timestamp_drawn: 1
|
||||
});
|
||||
|
||||
let newWinnerElement = new VirtualWinner({
|
||||
name: winner.name,
|
||||
phoneNumber: winner.phoneNumber,
|
||||
@@ -159,6 +212,10 @@ const drawWinner = async () => {
|
||||
await newWinnerElement.save();
|
||||
await Attendee.updateOne({ name: winner.name, phoneNumber: winner.phoneNumber }, { $set: { winner: true } });
|
||||
|
||||
let winners = await VirtualWinner.find({ timestamp_sent: undefined }).sort({
|
||||
timestamp_drawn: 1
|
||||
});
|
||||
|
||||
return { winner, color: colorToChooseFrom, winners };
|
||||
};
|
||||
|
||||
@@ -201,5 +258,6 @@ module.exports = {
|
||||
drawWinner,
|
||||
archive,
|
||||
lotteryByDate,
|
||||
allLotteries
|
||||
allLotteries,
|
||||
allLotteriesIncludingWinners
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user