routes.js 1.9 KB

123456789101112131415161718192021222324252627282930
  1. const defaults = require('./defaults')
  2. const asyncHandler = require('express-async-handler')
  3. const {verify, permissions} = require('../controllers/auth')
  4. module.exports = (opts) => {
  5. opts = defaults(opts)
  6. const { app, controller } = opts
  7. const TYPE_VIEW = `${opts.constantName}_VIEW`
  8. const TYPE_CREATE = `${opts.constantName}_CREATE`
  9. const TYPE_READ = `${opts.constantName}_READ`
  10. const TYPE_UPDATE = `${opts.constantName}_UPDATE`
  11. const TYPE_DELETE = `${opts.constantName}_DELETE`
  12. const TYPE_UNDELETE = `${opts.constantName}_UNDELETE`
  13. permissions.register(TYPE_VIEW, `Display ${opts.titleName} links in the nav bar.`)
  14. permissions.register(TYPE_CREATE, `Create ${opts.titlePlural}.`)
  15. permissions.register(TYPE_READ, `List and read ${opts.titlePlural}.`)
  16. permissions.register(TYPE_UPDATE, `Update ${opts.titlePlural}.`)
  17. permissions.register(TYPE_DELETE, `Delete ${opts.titlePlural}.`)
  18. permissions.register(TYPE_UNDELETE, `View undeleted ${opts.titlePlural} and restore deleted ${opts.titlePlural}.`)
  19. if (controller.list) app.get(`${opts.apiPrefix}`, verify(TYPE_READ), asyncHandler(controller.list))
  20. if (controller.create) app.post(`${opts.apiPrefix}`, verify(TYPE_CREATE), asyncHandler(controller.create))
  21. if (controller.trash) app.get(`${opts.apiPrefix}/trash`, verify(TYPE_UNDELETE), asyncHandler(controller.trash))
  22. if (controller.read) app.get(`${opts.apiPrefix}/:${opts.routeParam}`, verify(TYPE_READ), asyncHandler(controller.read))
  23. if (controller.update) app.patch(`${opts.apiPrefix}/:${opts.routeParam}`, verify(TYPE_UPDATE), asyncHandler(controller.update))
  24. if (controller.delete) app.delete(`${opts.apiPrefix}/:${opts.routeParam}`, verify(TYPE_DELETE), asyncHandler(controller.delete))
  25. if (controller.undelete) app.delete(`${opts.apiPrefix}/trash/:${opts.routeParam}`, verify(TYPE_UNDELETE), asyncHandler(controller.undelete))
  26. console.log(`crud: /api/${opts.paramPlural}`)
  27. }