'use strict'; const Joi = require('joi'); const pluginConfig = { handlerType: 'user', docs: { post: { description: 'login', notes: 'Attempt login' } } } /** Validator functions by request method */ const validators = { post: { payload: Joi.object({ user: Joi.object(), error: Joi.string() }) }, user: Joi.object({ user_id: Joi.number(), user_name: Joi.string(), user_email: Joi.string(), created_at: Joi.date(), updated_at: Joi.date(), token: Joi.string(), }) } module.exports = { method: 'post', path: '/login', options: { ...pluginConfig.docs.post, tags: ['api'], auth: false, handler: async function (request, h) { try { const { userService, displayService } = request.services() const res = request.payload // Callback to use as transaction const login = async (txn) => { return await userService.login({ email: res.user.email, password: res.user.password }, txn) } // Bound context from your plugin server declaration const user = await h.context.transaction(login) const token = userService.createToken(user) return { ok: true, handler: pluginConfig.handlerType, data: displayService.user(user, token) } } catch(err) { console.error(err) return { ok: false, handler: pluginConfig.handlerType, data: { error: `${err}` }, } } }, validate: validators.post, response: { schema: Joi.object({ ok: Joi.bool(), handler: Joi.string(), data: validators.user }), failAction: 'log' } } }