Files
vinlottis/api/request.js
KevinMidboe 83d9b30048 Request wine front & backend talk nicer togheter.
- requestWineController validates wine object and returns helpfull
 error repsonse if anything is missing.
 - requestWine uses new endpoint and calls api from within itself.
 - Linting.
2021-02-19 00:29:05 +01:00

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