104 lines
2.7 KiB
JavaScript
104 lines
2.7 KiB
JavaScript
const path = require("path");
|
|
|
|
const PreLotteryWine = require(path.join(__dirname, "/schemas/PreLotteryWine"));
|
|
const { WineNotFound } = require(path.join(__dirname, "/vinlottisErrors"));
|
|
|
|
const allWines = () => {
|
|
return PreLotteryWine.find().populate("winner");
|
|
};
|
|
|
|
const allWinesWithoutWinner = () => {
|
|
return PreLotteryWine.find({ winner: { $exists: false } });
|
|
};
|
|
|
|
const addWines = wines => {
|
|
const prelotteryWines = wines.map(wine => {
|
|
let newPrelotteryWine = new PreLotteryWine({
|
|
name: wine.name,
|
|
vivinoLink: wine.vivinoLink,
|
|
rating: wine.rating,
|
|
year: wine.year,
|
|
image: wine.image,
|
|
price: wine.price,
|
|
country: wine.country,
|
|
id: wine.id
|
|
});
|
|
console.log(newPrelotteryWine)
|
|
return newPrelotteryWine.save();
|
|
});
|
|
|
|
return Promise.all(prelotteryWines);
|
|
};
|
|
|
|
const wineById = id => {
|
|
return PreLotteryWine.findOne({ _id: id }).then(wine => {
|
|
if (wine == null) {
|
|
throw new WineNotFound();
|
|
}
|
|
return wine;
|
|
});
|
|
};
|
|
|
|
const updateWineById = (id, updateModel) => {
|
|
return PreLotteryWine.findOne({ _id: id }).then(wine => {
|
|
if (wine == null) {
|
|
throw new WineNotFound();
|
|
}
|
|
|
|
const updatedWine = {
|
|
name: updateModel.name != null ? updateModel.name : wine.name,
|
|
vivinoLink: updateModel.vivinoLink != null ? updateModel.vivinoLink : wine.vivinoLink,
|
|
rating: updateModel.rating != null ? updateModel.rating : wine.rating,
|
|
year: updateModel.year != null ? updateModel.year : wine.year,
|
|
image: updateModel.image != null ? updateModel.image : wine.image,
|
|
price: updateModel.price != null ? updateModel.price : wine.price,
|
|
country: updateModel.country != null ? updateModel.country : wine.country,
|
|
id: updateModel.id != null ? updateModel.id : wine.id
|
|
};
|
|
|
|
return PreLotteryWine.updateOne({ _id: id }, updatedWine).then(_ => updatedWine);
|
|
});
|
|
};
|
|
|
|
const addWinnerToWine = (wine, winner) => {
|
|
wine.winner = winner;
|
|
winner.prize_selected = true;
|
|
return Promise.all([wine.save(), winner.save()]);
|
|
};
|
|
|
|
const deleteWineById = id => {
|
|
return PreLotteryWine.findOne({ _id: id }).then(wine => {
|
|
if (wine == null) {
|
|
throw new WineNotFound();
|
|
}
|
|
|
|
return PreLotteryWine.deleteOne({ _id: id }).then(_ => wine);
|
|
});
|
|
};
|
|
|
|
const deleteWines = () => {
|
|
return PreLotteryWine.deleteMany();
|
|
};
|
|
|
|
const wineSchema = () => {
|
|
let schema = { ...PreLotteryWine.schema.obj };
|
|
let nulledSchema = Object.keys(schema).reduce((accumulator, current) => {
|
|
accumulator[current] = "";
|
|
return accumulator;
|
|
}, {});
|
|
|
|
return Promise.resolve(nulledSchema);
|
|
};
|
|
|
|
module.exports = {
|
|
allWines,
|
|
allWinesWithoutWinner,
|
|
addWines,
|
|
wineById,
|
|
addWinnerToWine,
|
|
updateWineById,
|
|
deleteWineById,
|
|
deleteWines,
|
|
wineSchema
|
|
};
|