156 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			3.7 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 Purchase = require(path.join(__dirname + "/../schemas/Purchase"));
 | 
						|
const Wine = require(path.join(__dirname + "/../schemas/Wine"));
 | 
						|
const Highscore = require(path.join(__dirname + "/../schemas/Highscore"));
 | 
						|
const PreLotteryWine = require(path.join(
 | 
						|
  __dirname + "/../schemas/PreLotteryWine"
 | 
						|
));
 | 
						|
 | 
						|
router.use((req, res, next) => {
 | 
						|
  next();
 | 
						|
});
 | 
						|
 | 
						|
router.route("/wines/prelottery").get(async (req, res) => {
 | 
						|
  let wines = await PreLotteryWine.find();
 | 
						|
  res.json(wines);
 | 
						|
});
 | 
						|
 | 
						|
router.route("/purchase/statistics").get(async (req, res) => {
 | 
						|
  let purchases = await Purchase.find()
 | 
						|
    .populate("wines")
 | 
						|
    .sort({ date: 1 });
 | 
						|
  res.json(purchases);
 | 
						|
});
 | 
						|
 | 
						|
router.route("/purchase/statistics/color").get(async (req, res) => {
 | 
						|
  const countColor = await Purchase.find();
 | 
						|
  let red = 0;
 | 
						|
  let blue = 0;
 | 
						|
  let yellow = 0;
 | 
						|
  let green = 0;
 | 
						|
  let stolen = 0;
 | 
						|
  for (let i = 0; i < countColor.length; i++) {
 | 
						|
    let element = countColor[i];
 | 
						|
    red += element.red;
 | 
						|
    blue += element.blue;
 | 
						|
    yellow += element.yellow;
 | 
						|
    green += element.green;
 | 
						|
    if (element.stolen != undefined) {
 | 
						|
      stolen += element.stolen;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  const highscore = await Highscore.find();
 | 
						|
  let redWin = 0;
 | 
						|
  let blueWin = 0;
 | 
						|
  let yellowWin = 0;
 | 
						|
  let greenWin = 0;
 | 
						|
  for (let i = 0; i < highscore.length; i++) {
 | 
						|
    let element = highscore[i];
 | 
						|
    for (let y = 0; y < element.wins.length; y++) {
 | 
						|
      let currentWin = element.wins[y];
 | 
						|
      switch (currentWin.color) {
 | 
						|
        case "blue":
 | 
						|
          blueWin += 1;
 | 
						|
          break;
 | 
						|
        case "red":
 | 
						|
          redWin += 1;
 | 
						|
          break;
 | 
						|
        case "yellow":
 | 
						|
          yellowWin += 1;
 | 
						|
          break;
 | 
						|
        case "green":
 | 
						|
          greenWin += 1;
 | 
						|
          break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  const total = red + yellow + blue + green;
 | 
						|
 | 
						|
  res.json({
 | 
						|
    red: {
 | 
						|
      total: red,
 | 
						|
      win: redWin
 | 
						|
    },
 | 
						|
    blue: {
 | 
						|
      total: blue,
 | 
						|
      win: blueWin
 | 
						|
    },
 | 
						|
    green: {
 | 
						|
      total: green,
 | 
						|
      win: greenWin
 | 
						|
    },
 | 
						|
    yellow: {
 | 
						|
      total: yellow,
 | 
						|
      win: yellowWin
 | 
						|
    },
 | 
						|
    stolen: stolen,
 | 
						|
    total: total
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
router.route("/highscore/statistics").get(async (req, res) => {
 | 
						|
  const highscore = await Highscore.find().populate("wins.wine");
 | 
						|
 | 
						|
  res.json(highscore);
 | 
						|
});
 | 
						|
 | 
						|
router.route("/wines/statistics").get(async (req, res) => {
 | 
						|
  const wines = await Wine.find();
 | 
						|
 | 
						|
  res.json(wines);
 | 
						|
});
 | 
						|
 | 
						|
router.route("/wines/statistics/overall").get(async (req, res) => {
 | 
						|
  const highscore = await Highscore.find().populate("wins.wine");
 | 
						|
  let wines = {};
 | 
						|
 | 
						|
  for (let i = 0; i < highscore.length; i++) {
 | 
						|
    let person = highscore[i];
 | 
						|
    for (let y = 0; y < person.wins.length; y++) {
 | 
						|
      let wine = person.wins[y].wine;
 | 
						|
      let date = person.wins[y].date;
 | 
						|
      let color = person.wins[y].color;
 | 
						|
 | 
						|
      if (wines[wine._id] == undefined) {
 | 
						|
        wines[wine._id] = {
 | 
						|
          name: wine.name,
 | 
						|
          occurences: wine.occurences,
 | 
						|
          vivinoLink: wine.vivinoLink,
 | 
						|
          rating: wine.rating,
 | 
						|
          image: wine.image,
 | 
						|
          id: wine.id,
 | 
						|
          _id: wine._id,
 | 
						|
          dates: [date],
 | 
						|
          winners: [person.name],
 | 
						|
          red: 0,
 | 
						|
          blue: 0,
 | 
						|
          green: 0,
 | 
						|
          yellow: 0
 | 
						|
        };
 | 
						|
        wines[wine._id][color] += 1;
 | 
						|
      } else {
 | 
						|
        wines[wine._id].dates.push(date);
 | 
						|
        wines[wine._id].winners.push(person.name);
 | 
						|
        if (wines[wine._id][color] == undefined) {
 | 
						|
          wines[wine._id][color] = 1;
 | 
						|
        } else {
 | 
						|
          wines[wine._id][color] += 1;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  res.json(Object.values(wines));
 | 
						|
});
 | 
						|
 | 
						|
module.exports = router;
 |