Feat/controllers - refactor entire backend and new admin interface #75

Merged
KevinMidboe merged 117 commits from feat/controllers into master 2021-02-19 00:19:52 +00:00
Showing only changes of commit 2eb933f03e - Show all commits

View File

@@ -7,6 +7,9 @@ const VirtualWinner = require(path.join(__dirname, "/schemas/VirtualWinner"));
const Lottery = require(path.join(__dirname, "/schemas/Purchase")); const Lottery = require(path.join(__dirname, "/schemas/Purchase"));
const Message = require(path.join(__dirname, "/message")); const Message = require(path.join(__dirname, "/message"));
const historyRepository = require(path.join(__dirname, "/history"));
const wineRepository = require(path.join(__dirname, "/wine"));
const { const {
WinnerNotFound, WinnerNotFound,
NoMoreAttendeesToWin, NoMoreAttendeesToWin,
@@ -17,11 +20,9 @@ const {
const archive = (date, raffles, stolen, wines) => { const archive = (date, raffles, stolen, wines) => {
const { blue, red, yellow, green } = raffles; const { blue, red, yellow, green } = raffles;
const bought = blue + red + yellow + green; const bought = blue + red + yellow + green;
date = date.setHours(0, 0, 0, 0);
return Lottery.findOneAndUpdate( return Promise.all(wines.map(wine => wineRepository.findWine(wine))).then(resolvedWines => {
{ date }, const lottery = new Lottery({
{
date, date,
blue, blue,
red, red,
@@ -29,10 +30,11 @@ const archive = (date, raffles, stolen, wines) => {
green, green,
bought, bought,
stolen, stolen,
wines wines: resolvedWines
}, });
{ upsert: true }
); return lottery.save();
});
}; };
const lotteryByDate = date => { const lotteryByDate = date => {
@@ -67,10 +69,65 @@ const lotteryByDate = date => {
}); });
}; };
const allLotteries = () => { const allLotteries = (sort = "asc", yearFilter = undefined) => {
return Lottery.find() const sortDirection = sort == "asc" ? 1 : -1;
.select("-_id -__v")
.populate("wines"); 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 () => { const drawWinner = async () => {
@@ -140,10 +197,6 @@ const drawWinner = async () => {
let winner = attendeeListDemocratic[Math.floor(Math.random() * attendeeListDemocratic.length)]; 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({ let newWinnerElement = new VirtualWinner({
name: winner.name, name: winner.name,
phoneNumber: winner.phoneNumber, phoneNumber: winner.phoneNumber,
@@ -159,6 +212,10 @@ const drawWinner = async () => {
await newWinnerElement.save(); await newWinnerElement.save();
await Attendee.updateOne({ name: winner.name, phoneNumber: winner.phoneNumber }, { $set: { winner: true } }); 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 }; return { winner, color: colorToChooseFrom, winners };
}; };
@@ -201,5 +258,6 @@ module.exports = {
drawWinner, drawWinner,
archive, archive,
lotteryByDate, lotteryByDate,
allLotteries allLotteries,
allLotteriesIncludingWinners
}; };