You are on page 1of 2

const { Lambda } = require('@engyalo/enterprise-aws-handler-utilities')

const logger = require('@engyalo/enterprise-logger-utilities')({ // eslint-disable-


line
name: 'eric-dishes.script',
})
const joi = require('joi')
const menu = require('../menu/eric-menu.json')
const categories = require('../menu/eric-categories.json')

const metadata = {
description: 'Returns dishes depending on selected category',
timeout: 60,
}

// Define schema // TODO: test defined variables in 'brain'


const schema = joi.object().keys({
transitions: joi.object().keys({
error: joi.string().optional().description('Error state'),
}).required(),
}).required()

// Define lambda entry point


const handler = async (event, context, callback) => {
const lambda = Lambda(event, context, callback)

// Validate received data


if (!lambda.options().validate(schema)) {
return lambda.response().default()
}

// Obtain dishes of selected category


const selectedCategorySlug = lambda.bot().brain().get('selected-category-slug')
const selectedCategory = categories.find(category =>
category.slug === selectedCategorySlug.action)
if (!selectedCategory) {
logger.error(`${handler.name} error`, 'Invalid category slug')
lambda.data().state().transitions().set('transitions.error')
return lambda.response().error()
}

logger.info(`Delivery tech - Eric challenge - Finding dishes of selected


category: ${selectedCategory.name}`)
const categoryDishes = menu.filter(dish => dish.category_id ===
selectedCategory.id)

// Create cards TODO: Find documentation about object syntax


const cards = categoryDishes.map(dish => ({
title: dish.name,
image_url: `${dish.url}`,
subtitle: `${dish.description}`,
buttons: [
{
type: 'postback',
title: dish.name,
payload: dish.id,
},
],
}))
logger.warn(cards)

// Create template
const template = {
type: 'template',
payload: {
template_type: 'generic',
elements: cards,
},
}

lambda.data().brain().set('category-dishes', categoryDishes)
lambda.data().state().template().custom(template)

return lambda.response().success()
}

module.exports = {
handler,
metadata,
schema,
}

You might also like