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;
 |