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:
		
							
								
								
									
										64
									
								
								api/controllers/requestController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								api/controllers/requestController.js
									
									
									
									
									
										Normal 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 | ||||
| } | ||||
| @@ -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 | ||||
| }; | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user