nzoth-lambda/index.js

59 lines
1.4 KiB
JavaScript

const AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
const knex = require('knex')({
client: 'mysql',
connection: {
host: 'nzoth-whispers.cnr1c5jzuhe8.us-east-1.rds.amazonaws.com',
user: 'lambda_user',
password: 'AppleADay',
database: 'nzoth'
}
});
const whispers = require('./whispers.json');
const snsService = new AWS.SNS({apiVersion: '2010-03-31'});
const getRandomWhisper = () => {
const randomIndex = Math.floor(Math.random() * (whispers.length - 1));
return whispers[randomIndex];
};
const sendWhisper = PhoneNumber => {
// TODO : Include opt-out logic
const Message = getRandomWhisper();
console.log(`Sending "${Message}" to "${PhoneNumber}"`);
return snsService.publish({
Message: Message,
PhoneNumber: PhoneNumber
}).promise()
.catch(err => console.error(`Error sending sms: ${err}`));
};
exports.handler = async (event) => {
const phoneNumbers = await knex
.select().from('phone_numbers').where('is_deleted', 0)
.catch(err => console.error(`Error getting phone_numbers: ${err}`));
if (!phoneNumbers) {
return;
}
const inFlightMessages = phoneNumbers
.map(r => r.phone_number)
.map( sendWhisper );
await Promise.all(inFlightMessages).catch(err => console.error(err));
console.log('Wrapping up');
return;
};