- requestWineController validates wine object and returns helpfull error repsonse if anything is missing. - requestWine uses new endpoint and calls api from within itself. - Linting.
69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
const path = require("path");
|
|
const RequestedWine = require(path.join(__dirname, "/schemas/RequestedWine"));
|
|
const Wine = require(path.join(__dirname, "/schemas/Wine"));
|
|
|
|
class RequestedWineNotFound extends Error {
|
|
constructor(message = "Wine with this id was not found.") {
|
|
super(message);
|
|
this.name = "RequestedWineNotFound";
|
|
this.statusCode = 404;
|
|
}
|
|
}
|
|
|
|
const addNew = async wine => {
|
|
let foundWine = await Wine.findOne({ id: wine.id });
|
|
|
|
if (foundWine == undefined) {
|
|
foundWine = new Wine({
|
|
name: wine.name,
|
|
vivinoLink: wine.vivinoLink,
|
|
rating: null,
|
|
occurences: null,
|
|
image: wine.image,
|
|
id: wine.id
|
|
});
|
|
await foundWine.save();
|
|
}
|
|
|
|
let requestedWine = await RequestedWine.findOne({ wineId: wine.id });
|
|
|
|
if (requestedWine == undefined) {
|
|
requestedWine = new RequestedWine({
|
|
count: 1,
|
|
wineId: wine.id,
|
|
wine: foundWine
|
|
});
|
|
} else {
|
|
requestedWine.count += 1;
|
|
}
|
|
await requestedWine.save();
|
|
|
|
return requestedWine;
|
|
};
|
|
|
|
const getById = id => {
|
|
return RequestedWine.findOne({ wineId: id })
|
|
.populate("wine")
|
|
.then(wine => {
|
|
if (wine == null) {
|
|
throw new RequestedWineNotFound();
|
|
}
|
|
|
|
return wine;
|
|
});
|
|
};
|
|
|
|
const deleteById = id => {
|
|
return getById(id).then(requestedWine => RequestedWine.deleteOne({ _id: requestedWine._id }));
|
|
};
|
|
|
|
const getAll = () => {
|
|
return RequestedWine.find({}).populate("wine");
|
|
};
|
|
|
|
module.exports = {
|
|
addNew,
|
|
getAll,
|
|
deleteById
|
|
};
|