const express = require('express');
const app = express()
app.use(express.json());
var Airtable = require('airtable');
var base = new Airtable({
apiKey: process.env.AIRTABLE_API_KEY
}).base(process.env.COVID_BASE);
app.listen(3000, () => console.log('Example app listening on port 3000!'))
const done = (err, res, responseJson) => {
if (err) {
console.error(err);
let responseJson2 = {};
responseJson2.fulfillmentText = err + "error";
res.send(responseJson2);
return;
}
res.json(responseJson);
console.log(responseJson);
res.send(responseJson);
}
const getCasesByCountry = (req, res) => {
let countryName = req.body.queryResult.parameters.country_name;
let countryStatus = req.body.queryResult.parameters.country_status;
let responseJson = {};
responseJson.fulfillmentText = 'Not Found';
base('CASES').select({
maxRecords: 1,
filterByFormula: 'OR({COUNTRY_NAME} = "' + countryName + '",lower({COUNTRY_STATUS})="' + countryStatus + '")',
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
console.log('Retrieved', record.get('Value'));
responseJson.fulfillmentText = 'The number of cases in ' + countryName + ' is ' + record.get('TOTAL_ACTIVE_CASES');
res.json(responseJson);
});
fetchNextPage();
}, (err) => done(err, res, responseJson));
}
const getDiagnostic = (req,res) => {
let fever = req.body.queryResult.parameters.fever;
let cough = req.body.queryResult.parameters.cough;
let diarrhea = req.body.queryResult.parameters.diarrhea;
console.log('1.1');
let responseJson = {};
responseJson.fulfillmentText = 'Not Found';
base('SYMPTOMS').select({
maxRecords: 1,
filterByFormula: 'AND(lower({FEVER}) = "' + fever.toLowerCase() + '",lower({COUGH})="' + cough.toLowerCase() + '",lower({DIARRHEA})="'+ diarrhea.toLowerCase() + '")',
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
responseJson.fulfillmentText = record.get('DIAGNOSTIC');
res.json(responseJson);
});
fetchNextPage();
}, (err) => done(err, res, responseJson));
}
//should be working until here
const getRequestStatus = (req, res) => {
let bankName = req.body.queryResult.parameters.request_type;
let responseJson = {};
responseJson.fulfillmentText = '';
base('REQUESTS').select({
maxRecords: 10,
filterByFormula: 'LOWER({REQUEST_TYPE}) = lower("' + bankName + '")',
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
console.log('Retrieved', record.get('Value'));
responseJson.fulfillmentText = responseJson.fulfillmentText + '\nThe status of ' + record.get('REQUEST_TYPE') + ' is ' + record.get('REQUEST_STATUS');
});
fetchNextPage();
}, (err) => done(err, res, responseJson));
}
const getIban = (req, res) => {
let contexts = req.body.queryResult.outputContexts;
var item = contexts.find(item => item.name.endsWith('/contexts/bank-account-set'));
let bankName = item.parameters.bank_name;
let responseJson = {};
responseJson.fulfillmentText = "Not found ";
base('BANKS').select({
maxRecords: 1,
filterByFormula: 'LOWER({BANK_NAME}) = lower("' + bankName + '")',
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
console.log('Retrieved', record.get('Value'));
responseJson.fulfillmentText = 'The IBAN of ' + bankName + ' is ' + record.get('BANK_IBAN');
res.json(responseJson);
});
fetchNextPage();
}, (err) => done(err, res, responseJson));
}
const completeTask = (req, res) => {
let contexts = req.body.queryResult.outputContexts;
var item = contexts.find(item => item.name.endsWith('/contexts/complete_task-followup'));
let taskType = item.parameters.task_type;
let id = 0;
let mainRecord;
let responseJson = {};
responseJson.fulfillmentText = "Not found"; // displayed response
let table = base('TASKS');
table.select({
maxRecords: 1,
filterByFormula: 'LOWER({TASK_TYPE}) = lower("' + taskType + '")',
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
id = record.get("ID");
mainRecord = record;
responseJson.fulfillmentText = "Awesome, your task was marked as completed.";
res.json(responseJson);
});
fetchNextPage();
}, (err) => done(err, res, responseJson));
table.update([{
"id": mainRecord.id,
"fields": {
"TASK_COMPLETED": true
}
}], (err, record) => {
if (err) {
done(err, res, responseJson);
}
});
}
//where the actions are configured
app.post('/', function(req, res) {
console.log(req);
let action = req.body.queryResult.action;
console.log(action);
let responseJson = {};
responseJson.fulfillmentText = 'This is an endpoint published to RunKit'; // displayed response
if (action === 'getBankAccountAmount') {
getBankAccountAmount(req, res);
} else if (action === 'getRequestStatus') {
getRequestStatus(req, res);
} else if (action === 'changedBankAccountIntent') {
getIban(req, res);
} else if (action === "Complete_Task.Complete_Task-yes") {
completeTask(req, res);
}
else if (action === "getCasesByCountry") {
getCasesByCountry(req, res);
}
else if (action === "getDiagnostic") {
getDiagnostic(req, res);
}
})
//How to test funcions
const checkConnect = () => {
console.log("test 1.1");
console.log("api: "+ process.env.AIRTABLE_API_KEY);
console.log("covid: "+ process.env.COVID_BASE);
base('SYMPTOMS').select({
maxRecords: 1,
filterByFormula: '{SYMPTOM_ID}=1',
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
console.log("response: "+ record.get('DIAGNOSTIC'));
});
fetchNextPage();
}, (err) => console.log("FALHOU: "+err));
// }, (err) => done(err, res, responseJson));
}