Chat Spread

node v6.17.1
version: 13.0.0
endpointsharetweet
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') ); } }); }
Loading…

no comments

    sign in to comment