143 lines
4.3 KiB
JavaScript
143 lines
4.3 KiB
JavaScript
const express = require("express");
|
||
const path = require("path");
|
||
|
||
const sub = require(path.join(__dirname, "/subscriptions"));
|
||
|
||
const _wineFunctions = require(path.join(__dirname, "/wine"));
|
||
const _personFunctions = require(path.join(__dirname, "/person"));
|
||
const Subscription = require(path.join(__dirname, "/schemas/Subscription"));
|
||
const Lottery = require(path.join(__dirname, "/schemas/Purchase"));
|
||
const PreLotteryWine = require(path.join(
|
||
__dirname, "/schemas/PreLotteryWine"
|
||
));
|
||
|
||
const submitWines = async (req, res) => {
|
||
const wines = req.body;
|
||
for (let i = 0; i < wines.length; i++) {
|
||
let wine = wines[i];
|
||
let newWonWine = new PreLotteryWine({
|
||
name: wine.name,
|
||
vivinoLink: wine.vivinoLink,
|
||
rating: wine.rating,
|
||
image: wine.image,
|
||
price: wine.price,
|
||
country: wine.country,
|
||
id: wine.id
|
||
});
|
||
await newWonWine.save();
|
||
}
|
||
|
||
let subs = await Subscription.find();
|
||
console.log("Sending new wines w/ push notification to all subscribers.")
|
||
for (let i = 0; i < subs.length; i++) {
|
||
let subscription = subs[i]; //get subscription from your databse here.
|
||
|
||
const message = JSON.stringify({
|
||
message: "Dagens vin er lagt til, se den på lottis.vin/dagens!",
|
||
title: "Ny vin!",
|
||
link: "/#/dagens"
|
||
});
|
||
|
||
try {
|
||
sub.sendNotification(subscription, message);
|
||
} catch (error) {
|
||
console.error("Error when trying to send push notification to subscriber.");
|
||
console.error(error);
|
||
}
|
||
}
|
||
|
||
return res.send({
|
||
message: "Submitted and notified push subscribers of new wines!",
|
||
success: true
|
||
});
|
||
};
|
||
|
||
const schema = async (req, res) => {
|
||
let schema = { ...PreLotteryWine.schema.obj };
|
||
let nulledSchema = Object.keys(schema).reduce((accumulator, current) => {
|
||
accumulator[current] = "";
|
||
return accumulator
|
||
}, {});
|
||
|
||
return res.send(nulledSchema);
|
||
}
|
||
|
||
// TODO IMPLEMENT WITH FRONTEND (unused)
|
||
const submitWinesToLottery = async (req, res) => {
|
||
const { lottery } = req.body;
|
||
const { date, wines } = lottery;
|
||
const wineObjects = await Promise.all(wines.map(async (wine) => await _wineFunctions.findSaveWine(wine)))
|
||
|
||
return Lottery.findOneAndUpdate({ date: date }, {
|
||
date: date,
|
||
wines: wineObjects
|
||
}, {
|
||
upsert: true
|
||
}).then(_ => res.send(true))
|
||
.catch(err => res.status(500).send({ message: 'Unexpected error while updating/saving wine to lottery.',
|
||
success: false,
|
||
exception: err.message }));
|
||
}
|
||
|
||
/**
|
||
* @apiParam (Request body) {Array} winners List of winners
|
||
*/
|
||
const submitWinnersToLottery = async (req, res) => {
|
||
const { lottery } = req.body;
|
||
const { winners, date } = lottery;
|
||
|
||
for (let i = 0; i < winners.length; i++) {
|
||
let currentWinner = winners[i];
|
||
let wonWine = await _wineFunctions.findSaveWine(currentWinner.wine); // TODO rename to findAndSaveWineToLottery
|
||
await _personFunctions.findSavePerson(currentWinner, wonWine, date); // TODO rename to findAndSaveWineToPerson
|
||
}
|
||
|
||
return res.json(true);
|
||
}
|
||
|
||
/**
|
||
* @apiParam (Request body) {Date} date Date of lottery
|
||
* @apiParam (Request body) {Number} blue Number of blue tickets
|
||
* @apiParam (Request body) {Number} red Number of red tickets
|
||
* @apiParam (Request body) {Number} green Number of green tickets
|
||
* @apiParam (Request body) {Number} yellow Number of yellow tickets
|
||
* @apiParam (Request body) {Number} bought Number of tickets bought
|
||
* @apiParam (Request body) {Number} stolen Number of tickets stolen
|
||
*/
|
||
const submitLottery = async (req, res) => {
|
||
const { lottery } = req.body
|
||
|
||
const { date,
|
||
blue,
|
||
red,
|
||
yellow,
|
||
green,
|
||
bought,
|
||
stolen } = lottery;
|
||
|
||
return Lottery.findOneAndUpdate({ date: date }, {
|
||
date: date,
|
||
blue: blue,
|
||
yellow: yellow,
|
||
red: red,
|
||
green: green,
|
||
bought: bought,
|
||
stolen: stolen
|
||
}, {
|
||
upsert: true
|
||
}).then(_ => res.send(true))
|
||
.catch(err => res.status(500).send({ message: 'Unexpected error while updating/saving lottery.',
|
||
success: false,
|
||
exception: err.message }));
|
||
|
||
return res.send(true);
|
||
};
|
||
|
||
module.exports = {
|
||
submitWines,
|
||
schema,
|
||
submitLottery,
|
||
submitWinnersToLottery,
|
||
submitWinesToLottery
|
||
};
|