crud-route.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. const { pascal, camel, param } = require('change-case')
  2. const plural = require('plural')
  3. const asyncHandler = require('express-async-handler')
  4. module.exports = ({
  5. app,
  6. controller,
  7. typeName,
  8. typePlural,
  9. camelName,
  10. camelPlural,
  11. paramName,
  12. paramPlural,
  13. apiPrefix
  14. }) => {
  15. if (!typeName) throw new Error('typeName is required')
  16. if (typeName !== pascal(typeName)) throw new Error('typeName should be PascalCased')
  17. if (!typePlural) typePlural = plural(typeName)
  18. if (typePlural !== pascal(typePlural)) throw new Error('typePlural should be PascalCased')
  19. if (!camelName) camelName = camel(typeName)
  20. if (camelName !== camel(camelName)) throw new Error('camelName should be camelCased')
  21. if (!camelPlural) camelPlural = plural(camelName)
  22. if (camelPlural !== camel(camelPlural)) throw new Error('camelPlural should be camelCased')
  23. if (!paramName) paramName = param(typeName)
  24. if (paramName !== camel(paramName)) throw new Error('paramName should be param-cased')
  25. if (!paramPlural) paramPlural = plural(paramName)
  26. if (paramPlural !== camel(paramPlural)) throw new Error('paramPlural should be param-cased')
  27. if (apiPrefix) apiPrefix = `/${paramPlural}`
  28. if (controller.list) app.get(`/api/${paramPlural}`, asyncHandler(controller.list))
  29. if (controller.create) app.post(`/api/${paramPlural}`, asyncHandler(controller.create))
  30. if (controller.trash) app.get(`/api/${paramPlural}/trash`, asyncHandler(controller.trash))
  31. if (controller.read) app.get(`/api/${paramPlural}/:id`, asyncHandler(controller.read))
  32. if (controller.update) app.patch(`/api/${paramPlural}/:id`, asyncHandler(controller.update))
  33. if (controller.delete) app.delete(`/api/${paramPlural}/:id`, asyncHandler(controller.delete))
  34. if (controller.undelete) app.delete(`/api/${paramPlural}/trash/:id`, asyncHandler(controller.undelete))
  35. }