Split request into controller and repo.

Also try returning better error message on exceptions and check for
errors in payload to return well-defined errors.
This commit is contained in:
2021-01-11 20:51:10 +01:00
parent fc69accea3
commit 4043954f95
3 changed files with 99 additions and 30 deletions

View File

@@ -0,0 +1,64 @@
const path = require("path");
const RequestRepository = require(path.join(
__dirname, "../request"
));
function addRequest(req, res) {
const { wine } = req.body;
return RequestRepository.addNew(wine)
.then(wine => res.json({
message: "Successfully added new request",
wine: wine,
success: true
}))
.catch(error => {
const { message, statusCode } = error;
return res.status(statusCode || 500).send({
success: false,
message: message || "Unable to add requested wine."
})
})
}
function getAllRequests(req, res) {
return RequestRepository.getAll()
.then(wines => res.json({
wines: wines,
success: true
}))
.catch(error => {
console.log("error in getAllRequests:", error);
const message = "Unable to fetch all requested wines."
return res.status(500).json({
success: false,
message: message
})
})
}
function deleteRequest(req, res) {
const { id } = req.params;
return RequestRepository.deleteById(id)
.then(_ => res.json({
message: `Slettet vin med id: ${ id }`,
success: true
}))
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
success: false,
message: message || "Unable to delete requested wine."
});
})
}
module.exports = {
addRequest,
getAllRequests,
deleteRequest
}

View File

@@ -1,4 +1,3 @@
const express = require("express");
const path = require("path");
const RequestedWine = require(path.join(
__dirname, "/schemas/RequestedWine"
@@ -7,31 +6,15 @@ const Wine = require(path.join(
__dirname, "/schemas/Wine"
));
const deleteRequestedWineById = async (req, res) => {
const { id } = req.params;
if(id == null){
return res.json({
message: "Id er ikke definert",
success: false
})
class RequestedWineNotFound extends Error {
constructor(message="Wine with this id was not found.") {
super(message);
this.name = "RequestedWineNotFound";
this.statusCode = 404;
}
await RequestedWine.deleteOne({wineId: id})
return res.json({
message: `Slettet vin med id: ${id}`,
success: true
});
}
const getAllRequestedWines = async (req, res) => {
const allWines = await RequestedWine.find({}).populate("wine");
return res.json(allWines);
}
const requestNewWine = async (req, res) => {
const {wine} = req.body
const addNew = async (wine) => {
let thisWineIsLOKO = await Wine.findOne({id: wine.id})
if(thisWineIsLOKO == undefined){
@@ -59,11 +42,31 @@ const requestNewWine = async (req, res) => {
}
await requestedWine.save()
return res.send(requestedWine);
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(wine => RequestedWine.deleteOne({ wineId: wine.id }))
}
const getAll = () => {
return RequestedWine.find({}).populate("wine");
}
module.exports = {
requestNewWine,
getAllRequestedWines,
deleteRequestedWineById
addNew,
getAll,
deleteById
};

View File

@@ -17,13 +17,15 @@ const virtualRegistrationApi = require(path.join(
const lottery = require(path.join(__dirname, "/lottery"));
const chatHistoryApi = require(path.join(__dirname, "/chatHistory"));
const requestController = require(path.join(__dirname, "/controllers/requestController"));
const router = express.Router();
router.get("/wineinfo/search", wineinfo.wineSearch);
router.get("/request/all", setAdminHeaderIfAuthenticated, request.getAllRequestedWines);
router.post("/request/new-wine", request.requestNewWine);
router.delete("/request/:id", request.deleteRequestedWineById);
router.get("/request/all", setAdminHeaderIfAuthenticated, requestController.getAllRequests);
router.post("/request/new-wine", requestController.addRequest);
router.delete("/request/:id", requestController.deleteRequest);
router.get("/wineinfo/schema", mustBeAuthenticated, update.schema);
router.get("/wineinfo/:ean", wineinfo.byEAN);