diff --git a/app/controllers/tutorial.controller.js b/app/controllers/tutorial.controller.js index 15d0f99..e4729a4 100644 --- a/app/controllers/tutorial.controller.js +++ b/app/controllers/tutorial.controller.js @@ -1,152 +1,115 @@ const db = require("../models"); -const Tutorial = db.tutorials; -const Op = db.Sequelize.Op; +const { tutorials: Tutorial, Sequelize: { Op } } = db; -// Create and Save a new Tutorial -exports.create = (req, res) => { - // Validate request - if (!req.body.title) { - res.status(400).send({ - message: "Content can not be empty!" - }); - return; +// Error handler +const handleError = (res, message, statusCode = 500) => { + res.status(statusCode).send({ message }); +}; + +// Request validation +const validateRequest = (req, res, fields) => { + for (const field of fields) { + if (!req.body[field]) { + handleError(res, `${field} can not be empty!`, 400); + return false; + } } + return true; +}; - // Create a Tutorial - const tutorial = { - title: req.body.title, - description: req.body.description, - published: req.body.published ? req.body.published : false - }; +// Create and Save a new Tutorial +exports.create = async (req, res) => { + if (!validateRequest(req, res, ['title'])) return; - // Save Tutorial in the database - Tutorial.create(tutorial) - .then(data => { - res.send(data); - }) - .catch(err => { - res.status(500).send({ - message: - err.message || "Some error occurred while creating the Tutorial." - }); - }); + try { + const tutorial = { + title: req.body.title, + description: req.body.description, + published: req.body.published || false + }; + const data = await Tutorial.create(tutorial); + res.send(data); + } catch (err) { + handleError(res, err.message || "Some error occurred while creating the Tutorial."); + } }; // Retrieve all Tutorials from the database. -exports.findAll = (req, res) => { - const title = req.query.title; - var condition = title ? { title: { [Op.like]: `%${title}%` } } : null; - - Tutorial.findAll({ where: condition }) - .then(data => { - res.send(data); - }) - .catch(err => { - res.status(500).send({ - message: - err.message || "Some error occurred while retrieving tutorials." - }); - }); +exports.findAll = async (req, res) => { + try { + const { title } = req.query; + const condition = title ? { title: { [Op.like]: `%${title}%` } } : null; + const data = await Tutorial.findAll({ where: condition }); + res.send(data); + } catch (err) { + handleError(res, err.message || "Some error occurred while retrieving tutorials."); + } }; // Find a single Tutorial with an id -exports.findOne = (req, res) => { - const id = req.params.id; +exports.findOne = async (req, res) => { + const { id } = req.params; - Tutorial.findByPk(id) - .then(data => { - if (data) { - res.send(data); - } else { - res.status(404).send({ - message: `Cannot find Tutorial with id=${id}.` - }); - } - }) - .catch(err => { - res.status(500).send({ - message: "Error retrieving Tutorial with id=" + id - }); - }); + try { + const data = await Tutorial.findByPk(id); + if (data) { + res.send(data); + } else { + handleError(res, `Cannot find Tutorial with id=${id}.`, 404); + } + } catch (err) { + handleError(res, `Error retrieving Tutorial with id=${id}`); + } }; // Update a Tutorial by the id in the request -exports.update = (req, res) => { - const id = req.params.id; +exports.update = async (req, res) => { + const { id } = req.params; - Tutorial.update(req.body, { - where: { id: id } - }) - .then(num => { - if (num == 1) { - res.send({ - message: "Tutorial was updated successfully." - }); - } else { - res.send({ - message: `Cannot update Tutorial with id=${id}. Maybe Tutorial was not found or req.body is empty!` - }); - } - }) - .catch(err => { - res.status(500).send({ - message: "Error updating Tutorial with id=" + id - }); - }); + try { + const [num] = await Tutorial.update(req.body, { where: { id } }); + if (num === 1) { + res.send({ message: "Tutorial was updated successfully." }); + } else { + handleError(res, `Cannot update Tutorial with id=${id}. Maybe Tutorial was not found or req.body is empty!`, 400); + } + } catch (err) { + handleError(res, `Error updating Tutorial with id=${id}`); + } }; // Delete a Tutorial with the specified id in the request -exports.delete = (req, res) => { - const id = req.params.id; +exports.delete = async (req, res) => { + const { id } = req.params; - Tutorial.destroy({ - where: { id: id } - }) - .then(num => { - if (num == 1) { - res.send({ - message: "Tutorial was deleted successfully!" - }); - } else { - res.send({ - message: `Cannot delete Tutorial with id=${id}. Maybe Tutorial was not found!` - }); - } - }) - .catch(err => { - res.status(500).send({ - message: "Could not delete Tutorial with id=" + id - }); - }); + try { + const num = await Tutorial.destroy({ where: { id } }); + if (num === 1) { + res.send({ message: "Tutorial was deleted successfully!" }); + } else { + handleError(res, `Cannot delete Tutorial with id=${id}. Maybe Tutorial was not found!`, 404); + } + } catch (err) { + handleError(res, `Could not delete Tutorial with id=${id}`); + } }; // Delete all Tutorials from the database. -exports.deleteAll = (req, res) => { - Tutorial.destroy({ - where: {}, - truncate: false - }) - .then(nums => { - res.send({ message: `${nums} Tutorials were deleted successfully!` }); - }) - .catch(err => { - res.status(500).send({ - message: - err.message || "Some error occurred while removing all tutorials." - }); - }); +exports.deleteAll = async (req, res) => { + try { + const nums = await Tutorial.destroy({ where: {}, truncate: false }); + res.send({ message: `${nums} Tutorials were deleted successfully!` }); + } catch (err) { + handleError(res, err.message || "Some error occurred while removing all tutorials."); + } }; -// find all published Tutorial -exports.findAllPublished = (req, res) => { - Tutorial.findAll({ where: { published: true } }) - .then(data => { - res.send(data); - }) - .catch(err => { - res.status(500).send({ - message: - err.message || "Some error occurred while retrieving tutorials." - }); - }); +// Find all published Tutorials +exports.findAllPublished = async (req, res) => { + try { + const data = await Tutorial.findAll({ where: { published: true } }); + res.send(data); + } catch (err) { + handleError(res, err.message || "Some error occurred while retrieving tutorials."); + } };