| 123456789101112131415161718192021222324252627282930 |
- const defaults = require('./defaults')
- const asyncHandler = require('express-async-handler')
- const {verify, permissions} = require('../controllers/auth')
- module.exports = (opts) => {
- opts = defaults(opts)
- const { app, controller } = opts
- const TYPE_VIEW = `${opts.constantName}_VIEW`
- const TYPE_CREATE = `${opts.constantName}_CREATE`
- const TYPE_READ = `${opts.constantName}_READ`
- const TYPE_UPDATE = `${opts.constantName}_UPDATE`
- const TYPE_DELETE = `${opts.constantName}_DELETE`
- const TYPE_UNDELETE = `${opts.constantName}_UNDELETE`
- permissions.register(TYPE_VIEW, `Display ${opts.titleName} links in the nav bar.`)
- permissions.register(TYPE_CREATE, `Create ${opts.titlePlural}.`)
- permissions.register(TYPE_READ, `List and read ${opts.titlePlural}.`)
- permissions.register(TYPE_UPDATE, `Update ${opts.titlePlural}.`)
- permissions.register(TYPE_DELETE, `Delete ${opts.titlePlural}.`)
- permissions.register(TYPE_UNDELETE, `View undeleted ${opts.titlePlural} and restore deleted ${opts.titlePlural}.`)
- if (controller.list) app.get(`${opts.apiPrefix}`, verify(TYPE_READ), asyncHandler(controller.list))
- if (controller.create) app.post(`${opts.apiPrefix}`, verify(TYPE_CREATE), asyncHandler(controller.create))
- if (controller.trash) app.get(`${opts.apiPrefix}/trash`, verify(TYPE_UNDELETE), asyncHandler(controller.trash))
- if (controller.read) app.get(`${opts.apiPrefix}/:${opts.routeParam}`, verify(TYPE_READ), asyncHandler(controller.read))
- if (controller.update) app.patch(`${opts.apiPrefix}/:${opts.routeParam}`, verify(TYPE_UPDATE), asyncHandler(controller.update))
- if (controller.delete) app.delete(`${opts.apiPrefix}/:${opts.routeParam}`, verify(TYPE_DELETE), asyncHandler(controller.delete))
- if (controller.undelete) app.delete(`${opts.apiPrefix}/trash/:${opts.routeParam}`, verify(TYPE_UNDELETE), asyncHandler(controller.undelete))
- console.log(`crud: /api/${opts.paramPlural}`)
- }
|