208 lines
4.8 KiB
JavaScript
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
|
|
};
|