diff --git a/src/modules/index.js b/src/modules/index.js new file mode 100644 index 0000000..5c268cd --- /dev/null +++ b/src/modules/index.js @@ -0,0 +1,30 @@ +import glob from 'glob' +import Router from 'koa-router' + +exports = module.exports = function initModules(app) { + glob(`${__dirname}/*`, { ignore: '**/index.js' }, (err, matches) => { + if (err) { throw err } + + matches.forEach((mod) => { + const routerConfig = require(`${mod}/router`).default + const router = new Router({ prefix: routerConfig.base }) + + for (const [key, props] of Object.entries(routerConfig)) { + if (key === 'base') { continue } + + const { + method = '', + route = '', + middleware = [], + controller + } = props + + router[method.toLowerCase()](route, controller) + + app + .use(router.routes()) + .use(router.allowedMethods()) + } + }) + }) +} diff --git a/src/modules/users/controller.js b/src/modules/users/controller.js new file mode 100644 index 0000000..1de195f --- /dev/null +++ b/src/modules/users/controller.js @@ -0,0 +1,23 @@ +import User from '../../models/users' +import config from '../../../config' +import jwt from 'jsonwebtoken' + +export async function createUser(ctx) { + const user = new User(ctx.request.body.user) + try { + await user.save() + const token = jwt.sign({ id: user.id }, config.token) + + const response = user.toJSON() + + delete response.password + delete response.salt + + ctx.body = { + user: response, + token + } + } catch (err) { + ctx.throw(422, err) + } +} diff --git a/src/modules/users/router.js b/src/modules/users/router.js index 1ee0fc2..909c0e8 100644 --- a/src/modules/users/router.js +++ b/src/modules/users/router.js @@ -41,8 +41,9 @@ export default { * "error": "Unprocessable Entity" * } */ - '/': { + 'Create new users': { method: 'POST', + route: '/', controller: createUser } }