const member = require("../controllers/Member.controller.js"); const db = require(".."); var router = require("express").Router(); // Create a new Member router.post("/", member.create); // Retrieve all Members router.get("/", member.findAll); // GET MEMBER router.get("/:id", async (req, res) => { const id = req.params.id; if (!id) { res.status(400).send({ message: "Member id cannot be empty!" }); return } return db.Member.findByPk(id) .then(async (member) => { if (member === null) { res.status(404).send({ message: `Member with id=${id} was not found!` }); return } res.send(member) }) .catch(err => { res.status(500).send({ message: err.message || "Some error occurred while retrieving members." }) }) }); // GET MEMBER DETAILS router.get("/:id/details", async (req, res) => { const id = req.params.id; if (!id) { res.status(400).send({ message: "Member id cannot be empty!" }); return } return db.Member.findByPk(id, { include: [ 'rank', 'status', 'awards', 'coursesSMEFor', 'coursesTaught', 'coursesAttended' ] }) .then(async (member) => { if (member === null) { res.status(404).send({ message: `Member with id=${id} was not found!` }); return } res.send(member) }) .catch(err => { res.status(500).send({ message: err.message || "Some error occurred while retrieving members." }) }) }); // COURSES TAUGHT router.get("/:id/courses/taught", async (req, res) => { const id = req.params.id; if (!id) { res.status(400).send({ message: "Member id cannot be empty!" }); return } return db.Member.findByPk(id) .then(async (member) => { if (member === null) { res.status(404).send({ message: `Member with id=${id} was not found!` }); return } const courses = await member.getCoursesSMEFor() res.send(courses) }) .catch(err => { res.status(500).send({ message: err.message || "Some error occurred while retrieving members." }) }) }); // COURSES ATTENDED router.get("/:id/courses/attended", async (req, res) => { const id = req.params.id; if (!id) { res.status(400).send({ message: "Member id cannot be empty!" }); return } return db.Member.findByPk(id) .then(async (member) => { if (member === null) { res.status(404).send({ message: `Member with id=${id} was not found!` }); return } const courses = await member.getCoursesAttended() res.send(courses) }) .catch(err => { res.status(500).send({ message: err.message || "Some error occurred while retrieving members." }) }) }); // COURSES SME FOR router.get("/:id/courses/sme", async (req, res) => { const id = req.params.id; if (!id) { res.status(400).send({ message: "Member id cannot be empty!" }); return } return db.Member.findByPk(id) .then(async (member) => { if (member === null) { res.status(404).send({ message: `Member with id=${id} was not found!` }); return } const courses = await member.getCoursesSMEFor() res.send(courses) }) .catch(err => { res.status(500).send({ message: err.message || "Some error occurred while retrieving members." }) }) }); // UPDATE MEMBER router.put("/:id", async (req, res) => { const id = req.params.id; if (!id) { res.status(400).send({ message: "Member id cannot be empty!" }); return } return db.Member.findByPk(id) .then(async (member) => { if (member === null) { res.status(404).send({ message: `Member with id=${id} was not found!` }); return } member.set(req.body) await member.save() res.send(member) }) .catch(err => { res.status(500).send({ message: err.message || "Some error occurred while retrieving members.", error: err }) }) }); // Delete a Member with id router.delete("/:id", async (req, res) => { const id = req.params.id; if (!id) { res.status(400).send({ message: "Member id cannot be empty!" }); return } return db.Member.findByPk(id) .then(async (member) => { if (member === null) { res.status(404).send({ message: `Member with id=${id} was not found!` }); return } await member.destroy() res.send({ deleted: member, message: `Member with id=${id} was deleted!` }) }) .catch(err => { res.status(500).send({ message: err.message || "Some error occurred while retrieving members.", error: err }) }) }); // Delete all Members // router.delete("/", member.deleteAll); module.exports = { apiPath: "/api/members", apiRouter: router };