import Project from './model' import mongoose from 'mongoose' import express from 'express' export function getHandler (req, res) { /** GET handler (request one or more projects) */ let [ id ] = req.params /** check whether an id was specified. */ if (typeof id !== 'undefined') { try { id = mongoose.Types.ObjectId(id.substring(1)) } catch (err) { res.status(422) res.send(err) return } /** if yes, return the one project */ Project.findOne({ _id: id }, function (err, project) { if (err) { res.status(404) res.send(err) return } res.json(project) }) } else { /** if not, return all projects */ const { limit, offset } = req.query Project.find({}, { limit: Math.min(Math.max(parseInt(limit) || 20, 1), 100), skip: Math.max(parseInt(offset) || 0, 0) }, function (err, projects) { if (err) { res.status(404) res.send(err) return } res.json(projects) }) } } export function postHandler (req, res) { /** POST handler (insert new projects into database) */ const project = new Project(req.body) project.save(function (err) { if (err) { res.status(422) res.send(err) return } res.send() }) } export function putHandler (req, res) { /** PUT handler (update existing project) */ const id = mongoose.Types.ObjectId(req.params['0'].substring(1)) Project.findOne({ _id: id }, function (err, project) { if (err) { res.status(404) res.send(err) } for (let prop in req.body) { project[prop] = req.body[prop] } project.save(function (err) { if (err) { res.status(422) res.send(err) } res.send() }) }) } export function deleteHandler (req, res) { /** DELETE handler (delete project) */ const id = mongoose.Types.ObjectId(req.params['0'].substring(1)) Project.remove({ _id: id }, function (err, project) { if (err) { res.send(err) } res.send() }) } const router = express.Router() router.get(/\/(\w+)?\/?$/, getHandler) router.post('/', postHandler) router.put(/\/(\w+)?\/?$/, putHandler) router.delete('/', deleteHandler) export default router