Преглед изворни кода

Use routeParam instead of id

Alan Colon пре 7 година
родитељ
комит
50ff9fe1d0
3 измењених фајлова са 37 додато и 26 уклоњено
  1. 32 21
      lib/crud/controller.js
  2. 1 1
      lib/crud/defaults.js
  3. 4 4
      lib/crud/routes.js

+ 32 - 21
lib/crud/controller.js

@@ -1,9 +1,10 @@
+const defaults = require('./defaults')
 const { Op } = require('sequelize')
 
-const crudController = ({
-  Type
-}) => ({
-  list: async (req, res) => {
+const crudController = (opts) => {
+  opts = defaults(opts)
+  const { Type } = opts
+  const list = async (req, res) => {
     // TODO Pagination (http://docs.sequelizejs.com/manual/tutorial/querying.html#pagination-limiting)
     if (req.query && req.query.q) {
       const fields = [Type.tableAttributes.name, Type.tableAttributes.tag].filter(x => x)
@@ -18,24 +19,24 @@ const crudController = ({
       const data = (await Type.findAll()).map(d => d.sanitize ? d.sanitize() : d)
       res.status(200).send(data && data.sanitize ? data.sanitize() : data)
     }
-  },
-  create: async (req, res) => {
+  }
+  const create = async (req, res) => {
     const data = (await Type.create(req.body))
     res.status(200).send(data && data.sanitize ? data.sanitize() : data)
-  },
-  read: async (req, res) => {
-    const data = (await Type.findOne({where: {id: req.params.id}}))
+  }
+  const read = async (req, res) => {
+    const data = (await Type.findOne({where: {id: req.params[opts.routeParam]}}))
     res.status(200).send(data && data.sanitize ? data.sanitize() : data)
-  },
-  update: async (req, res) => {
-    const data = (await Type.update(req.body, { where: { id: req.params.id } }))
+  }
+  const update = async (req, res) => {
+    const data = (await Type.update(req.body, { where: { id: req.params[opts.routeParam] } }))
     res.status(200).send(data && data.sanitize ? data.sanitize() : data)
-  },
-  delete: async (req, res) => {
-    const data = (await Type.destroy({ where: { id: req.params.id } }))
+  }
+  const $delete = async (req, res) => {
+    const data = (await Type.destroy({ where: { id: req.params[opts.routeParam] } }))
     res.status(204).end()
-  },
-  trash: async (req, res) => {
+  }
+  const trash = async (req, res) => {
     const data = (await Type.findAll({
       model: Type,
       paranoid: false,
@@ -44,15 +45,25 @@ const crudController = ({
       }
     }))
     res.status(200).send(data && data.sanitize ? data.sanitize() : data)
-  },
-  undelete: async (req, res) => {
+  }
+  const undelete = async (req, res) => {
     const data = (await Type.update({ deletedAt: null }, {
       paranoid: false,
-      where: { id: req.params.id }
+      where: { id: req.params[opts.routeParam] }
     }))
     res.status(200).send(data && data.sanitize ? data.sanitize() : data)
   }
   // TODO: Create, Read, Update, Delete
-})
+
+  return {
+    list,
+    create,
+    read,
+    update,
+    delete: $delete,
+    trash,
+    undelete
+  }
+}
 
 module.exports = crudController

+ 1 - 1
lib/crud/defaults.js

@@ -27,7 +27,7 @@ const plural = require('plural')
 
 const defaults = (opts) => {
   opts = Object.assign({}, opts)
-  if (!opts.pascalName) opts.pascalName = pascal(opts.titleName || opts.camelName || opts.paramName || '')
+  if (!opts.pascalName) opts.pascalName = pascal(opts.titleName || opts.camelName || opts.paramName || (opts.Type && opts.Type.name) || '')
   if (!opts.pascalName) throw new Error('pascalName is required')
   if (opts.pascalName !== pascal(opts.pascalName)) throw new Error('pascalName should be PascalCased')
   if (!opts.pascalPlural) opts.pascalPlural = plural(opts.pascalName)

+ 4 - 4
lib/crud/routes.js

@@ -7,8 +7,8 @@ module.exports = (opts) => {
   if (controller.list) app.get(`/api/${opts.paramPlural}`, asyncHandler(controller.list))
   if (controller.create) app.post(`/api/${opts.paramPlural}`, asyncHandler(controller.create))
   if (controller.trash) app.get(`/api/${opts.paramPlural}/trash`, asyncHandler(controller.trash))
-  if (controller.read) app.get(`/api/${opts.paramPlural}/:id`, asyncHandler(controller.read))
-  if (controller.update) app.patch(`/api/${opts.paramPlural}/:id`, asyncHandler(controller.update))
-  if (controller.delete) app.delete(`/api/${opts.paramPlural}/:id`, asyncHandler(controller.delete))
-  if (controller.undelete) app.delete(`/api/${opts.paramPlural}/trash/:id`, asyncHandler(controller.undelete))
+  if (controller.read) app.get(`/api/${opts.paramPlural}/:${opts.routeParam}`, asyncHandler(controller.read))
+  if (controller.update) app.patch(`/api/${opts.paramPlural}/:${opts.routeParam}`, asyncHandler(controller.update))
+  if (controller.delete) app.delete(`/api/${opts.paramPlural}/:${opts.routeParam}`, asyncHandler(controller.delete))
+  if (controller.undelete) app.delete(`/api/${opts.paramPlural}/trash/:${opts.routeParam}`, asyncHandler(controller.undelete))
 }