let URL = require('url');
let request = require('request');
let Airtable = require('airtable');
Airtable.configure({
endpointUrl: 'https://api.airtable.com',
apiKey: process.env.AIRTABLE_API_KEY
});
let reservedkeys = [
'base_id',
'user_created_message',
'user_updated_message',
];
function sendResponse(response) {
return function(result) {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(
JSON.stringify(result)
);
}
}
function errorHandler(sendRes, query, type) {
return function(err, user) {
if (err) {
sendRes(err);
return;
}
if (type === 'create' && query.user_created_message) {
sendRes([{ text: query.user_created_message }]);
} else if (type === 'update' && query.user_updated_message) {
sendRes([{ text: query.user_updated_message }]);
}
}
}
function getOnlyUserData(data) {
return Object.keys(data).reduce(function(newObj, key) {
if (!reservedkeys.includes(key.toLowerCase())) {
newObj[key] = data[key];
}
return newObj;
}, {});
}
exports.endpoint = function(req, res) {
let query = URL.parse(req.url, true).query;
let sendRes = sendResponse(res);
if (!query.base_id) sendRes([{ text: '"base_id" field missing' }]);
if (!query.user_id) sendRes([{ text: '"user_id" field missing' }]);
let base = Airtable.base(query.base_id);
let dataTable = base('Data');
dataTable.select({
maxRecords: 1,
fields: ['user_id'],
filterByFormula: `{user_id} = '${query.user_id}'`
})
.firstPage(function(err, records) {
if (err) {
sendRes(err);
return;
}
let user = records[0];
let data = getOnlyUserData(query);
if (user) {
dataTable.create(
data,
errorHandler(sendRes, query, 'create')
);
} else {
dataTable.create(
data,
errorHandler(sendRes, query, 'create')
);
}
});
}