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_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_CREATE) permissions.register(TYPE_READ) permissions.register(TYPE_UPDATE) permissions.register(TYPE_DELETE) permissions.register(TYPE_UNDELETE) if (controller.list) app.get(`/api/${opts.paramPlural}`, verify(TYPE_READ), asyncHandler(controller.list)) if (controller.create) app.post(`/api/${opts.paramPlural}`, verify(TYPE_CREATE), asyncHandler(controller.create)) if (controller.trash) app.get(`/api/${opts.paramPlural}/trash`, verify(TYPE_UNDELETE), asyncHandler(controller.trash)) if (controller.read) app.get(`/api/${opts.paramPlural}/:${opts.routeParam}`, verify(TYPE_READ), asyncHandler(controller.read)) if (controller.update) app.patch(`/api/${opts.paramPlural}/:${opts.routeParam}`, verify(TYPE_UPDATE), asyncHandler(controller.update)) if (controller.delete) app.delete(`/api/${opts.paramPlural}/:${opts.routeParam}`, verify(TYPE_DELETE), asyncHandler(controller.delete)) if (controller.undelete) app.delete(`/api/${opts.paramPlural}/trash/:${opts.routeParam}`, verify(TYPE_UNDELETE), asyncHandler(controller.undelete)) console.log(`crud: /api/${opts.paramPlural}`) }