Files
vinlottis/api/controllers/lotteryWineController.js

208 lines
4.8 KiB
JavaScript

const path = require("path");
const prelotteryWineRepository = require(path.join(__dirname, "../prelotteryWine"));
const allWines = (req, res) => {
return prelotteryWineRepository
.allWines()
.then(wines =>
res.send({
wines: wines,
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
success: false,
message: message || "Unable to fetch lottery wines."
});
});
};
const addWines = (req, res) => {
let { wines } = req.body;
if (!(wines instanceof Array)) {
return res.status(400).send({
message: "Wines must be array.",
success: false
});
}
const validateAllWines = wines =>
wines.map(wine => {
const requiredAttributes = ["name", "vivinoLink", "image", "id", "price"];
return Promise.all(
requiredAttributes.map(attr => {
if (typeof wine[attr] === "undefined" || wine[attr] == "") {
return Promise.reject({
message: `Incorrect or missing attribute: ${attr}.`,
statusCode: 400,
success: false
});
}
return Promise.resolve();
})
).then(_ => Promise.resolve(wine));
});
return Promise.all(validateAllWines(wines))
.then(wines => prelotteryWineRepository.addWines(wines))
.then(savedWines => {
var io = req.app.get("socketio");
io.emit("new_wine", {});
return true;
})
.then(success =>
res.send({
message: `Successfully added wines to lottery.`,
success: success
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
message: message || "Unexpected error occured adding wines.",
success: false
});
});
};
const wineById = (req, res) => {
const { id } = req.params;
return prelotteryWineRepository
.wineById(id)
.then(wine =>
res.send({
wine,
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
message: message || "Unexpected error occured while fetching wine by id.",
success: false
});
});
};
const updateWineById = (req, res) => {
const { id } = req.params;
const { wine } = req.body;
if (id == null || id == "undefined") {
return res.status(400).send({
message: "Unable to update without id.",
success: false
});
}
return prelotteryWineRepository
.updateWineById(id, wine)
.then(updatedWine => {
var io = req.app.get("socketio");
io.emit("refresh_data", {});
return updatedWine;
})
.then(wine =>
res.send({
wine,
message: `Updated wine: ${wine.name}`,
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
message: message || "Unexpected error occured while deleteing wine by id.",
success: false
});
});
};
const deleteWineById = (req, res) => {
const { id } = req.params;
return prelotteryWineRepository
.deleteWineById(id)
.then(removedWine => {
var io = req.app.get("socketio");
io.emit("refresh_data", {});
return removedWine;
})
.then(wine =>
res.send({
message: `Removed wine: ${wine.name}`,
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
message: message || "Unexpected error occured while deleteing wine by id.",
success: false
});
});
};
const deleteWines = (req, res) => {
return prelotteryWineRepository
.deleteWines()
.then(_ => {
var io = req.app.get("socketio");
io.emit("refresh_data", {});
})
.then(_ =>
res.send({
message: "Removed all wines.",
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
message: message || "Unexpected error occured while deleting wines",
success: false
});
});
};
const wineSchema = (req, res) => {
return prelotteryWineRepository
.wineSchema()
.then(schema =>
res.send({
schema: schema,
message: `Wine schema template.`,
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
success: false,
message: message || "Unable to fetch wine schema template."
});
});
};
module.exports = {
allWines,
addWines,
wineById,
updateWineById,
deleteWineById,
deleteWines,
wineSchema
};