145 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const express = require("express");
 | 
						|
const path = require("path");
 | 
						|
const router = express.Router();
 | 
						|
const mongoose = require("mongoose");
 | 
						|
mongoose.connect("mongodb://localhost:27017/vinlottis", {
 | 
						|
  useNewUrlParser: true
 | 
						|
});
 | 
						|
 | 
						|
const sub = require(path.join(__dirname + "/../api/subscriptions"));
 | 
						|
 | 
						|
const Subscription = require(path.join(__dirname + "/../schemas/Subscription"));
 | 
						|
const Purchase = require(path.join(__dirname + "/../schemas/Purchase"));
 | 
						|
const Wine = require(path.join(__dirname + "/../schemas/Wine"));
 | 
						|
const PreLotteryWine = require(path.join(
 | 
						|
  __dirname + "/../schemas/PreLotteryWine"
 | 
						|
));
 | 
						|
const Highscore = require(path.join(__dirname + "/../schemas/Highscore"));
 | 
						|
 | 
						|
router.use((req, res, next) => {
 | 
						|
  next();
 | 
						|
});
 | 
						|
 | 
						|
router.route("/log/wines").post(async (req, res) => {
 | 
						|
  if (!req.isAuthenticated()) {
 | 
						|
    res.send(false);
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  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,
 | 
						|
      id: wine.id
 | 
						|
    });
 | 
						|
    await newWonWine.save();
 | 
						|
  }
 | 
						|
 | 
						|
  let subs = await Subscription.find();
 | 
						|
  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!"
 | 
						|
    });
 | 
						|
    sub.sendNotification(subscription, message);
 | 
						|
  }
 | 
						|
 | 
						|
  res.send(true);
 | 
						|
});
 | 
						|
 | 
						|
router.route("/log").post(async (req, res) => {
 | 
						|
  if (!req.isAuthenticated()) {
 | 
						|
    res.send(false);
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  await PreLotteryWine.deleteMany();
 | 
						|
 | 
						|
  const purchaseBody = req.body.purchase;
 | 
						|
  const winnersBody = req.body.winners;
 | 
						|
 | 
						|
  const date = purchaseBody.date;
 | 
						|
  const blue = purchaseBody.blue;
 | 
						|
  const red = purchaseBody.red;
 | 
						|
  const yellow = purchaseBody.yellow;
 | 
						|
  const green = purchaseBody.green;
 | 
						|
 | 
						|
  const bought = purchaseBody.bought;
 | 
						|
  const stolen = purchaseBody.stolen;
 | 
						|
 | 
						|
  const winesThisDate = [];
 | 
						|
 | 
						|
  for (let i = 0; i < winnersBody.length; i++) {
 | 
						|
    let currentWinner = winnersBody[i];
 | 
						|
 | 
						|
    let wonWine = await Wine.findOne({ name: currentWinner.wine.name });
 | 
						|
    if (wonWine == undefined) {
 | 
						|
      let newWonWine = new Wine({
 | 
						|
        name: currentWinner.wine.name,
 | 
						|
        vivinoLink: currentWinner.wine.vivinoLink,
 | 
						|
        rating: currentWinner.wine.rating,
 | 
						|
        occurences: 1,
 | 
						|
        image: currentWinner.wine.image,
 | 
						|
        id: currentWinner.wine.id
 | 
						|
      });
 | 
						|
      await newWonWine.save();
 | 
						|
      wonWine = newWonWine;
 | 
						|
    } else {
 | 
						|
      wonWine.occurences += 1;
 | 
						|
      wonWine.image = currentWinner.wine.image;
 | 
						|
      wonWine.id = currentWinner.wine.id;
 | 
						|
      await wonWine.save();
 | 
						|
    }
 | 
						|
 | 
						|
    winesThisDate.push(wonWine);
 | 
						|
 | 
						|
    const person = await Highscore.findOne({
 | 
						|
      name: currentWinner.name
 | 
						|
    });
 | 
						|
 | 
						|
    if (person == undefined) {
 | 
						|
      let newPerson = new Highscore({
 | 
						|
        name: currentWinner.name,
 | 
						|
        wins: [
 | 
						|
          {
 | 
						|
            color: currentWinner.color,
 | 
						|
            date: date,
 | 
						|
            wine: wonWine
 | 
						|
          }
 | 
						|
        ]
 | 
						|
      });
 | 
						|
 | 
						|
      await newPerson.save();
 | 
						|
    } else {
 | 
						|
      person.wins.push({
 | 
						|
        color: currentWinner.color,
 | 
						|
        date: date,
 | 
						|
        wine: wonWine
 | 
						|
      });
 | 
						|
      person.markModified("wins");
 | 
						|
      await person.save();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  let purchase = new Purchase({
 | 
						|
    date: date,
 | 
						|
    blue: blue,
 | 
						|
    yellow: yellow,
 | 
						|
    red: red,
 | 
						|
    green: green,
 | 
						|
    wines: winesThisDate,
 | 
						|
    bought: bought,
 | 
						|
    stolen: stolen
 | 
						|
  });
 | 
						|
 | 
						|
  await purchase.save();
 | 
						|
 | 
						|
  res.send(true);
 | 
						|
});
 | 
						|
 | 
						|
module.exports = router;
 |