Skip to content

Commit

Permalink
fixed issue with outdated PostgreSQL client
Browse files Browse the repository at this point in the history
  • Loading branch information
nash-md committed Sep 4, 2018
1 parent 6503dd9 commit 50f1338
Show file tree
Hide file tree
Showing 5 changed files with 131 additions and 166 deletions.
18 changes: 9 additions & 9 deletions package.json
@@ -1,12 +1,12 @@
{
"name": "twilio-contact-center",
"description": "A simple omni channel contact center using Twilio WebRTC Client, Video, SMS, Chat and Taskrouter",
"version": "1.9.0",
"version": "1.9.1",
"author": "Matthias Damm",
"contributors": [
{
"name" : "Hunter Rancourt",
"url" : "https://github.com/skwid138"
"name": "Hunter Rancourt",
"url": "https://github.com/skwid138"
}
],
"license": "MIT",
Expand All @@ -29,19 +29,19 @@
"contact centre"
],
"dependencies": {
"async": "^2.5.0",
"async": "^2.6.1",
"body-parser": "^1.18.2",
"compression": "^1.7.1",
"compression": "^1.7.3",
"express": "^4.16.2",
"express-session": "^1.13.0",
"pg": "^4.5.6",
"twilio": "^3.13.1"
"pg": "^7.4.3",
"twilio": "^3.19.2"
},
"devDependencies": {
"eslint": "^3.5.x"
},
"engines": {
"node": "^6.5.x"
"node": "8.9.x"
},
"files": [
"README.md",
Expand All @@ -51,4 +51,4 @@
"start": "node app.js",
"lint": "./node_modules/.bin/eslint . || exit 0"
}
}
}
87 changes: 18 additions & 69 deletions setup-database.js
@@ -1,71 +1,20 @@
const async = require('async')
const pg = require('pg')
const fs = require('fs')
const path = require('path')

async.waterfall([

function (callback) {

pg.connect(process.env.DATABASE_URL, function (err, client, done) {
if (err) {
callback(err)
} else {
callback(null, client)
}
})

}, function (client, callback) {

client.query('CREATE TABLE IF NOT EXISTS configuration (id serial, data text)',
function (err, result) {
if (err) {
callback(err)
} else {
callback(null, client)
}
}
)

}, function (client, callback) {

client.query('TRUNCATE configuration', function (err, result) {
if (err) {
callback(err)
} else {
callback(null, client)
}
})

}, function (client, callback) {

/* load configuration template */
fs.readFile(path.join(process.cwd(), './configuration.json'), 'utf8', function (err, data) {
if (err) {
callback(err)
}
callback(null, client, data)
})

}, function (client, configuration, callback) {

client.query('INSERT INTO configuration(data) values($1)', [configuration],
function (err, result) {
if (err) {
callback(err)
} else {
callback(null, 'table successfully created, configuration saved')
}
}
)

}
],function (err, message) {
if (err) {
console.log(err)
process.exit(1)
} else {
console.log(message)
}
const { readConfigurationFromFile } = require('./util-file')
const { createClient, createTableIfNotExists, truncateTable, writeConfiguration } = require('./util-pg')

const client = createClient()

client.connect().then(() => {
return createTableIfNotExists(client)
}).then((result) => {
return truncateTable(client)
}).then((result) => {
return readConfigurationFromFile()
}).then((configurationAsString) => {
return writeConfiguration(client, configurationAsString)
}).then((result) => {
console.log('table successfully created, configuration saved')
process.exit(0)
}).catch((error) => {
console.log(error)
process.exit(1)
})
18 changes: 11 additions & 7 deletions util-common.js
@@ -1,12 +1,16 @@
module.exports.generateSessionExirationDate = function (seconds) {
// TODO, throw exception is parameter is not set
var now = new Date()
var offset = (now.getTimezoneOffset() * 60 * 1000) * -1
var date = new Date(now.getTime() + offset + (seconds * 1000))
const generateSessionExirationDate = (seconds) => {
const now = new Date()
const offset = (now.getTimezoneOffset() * 60 * 1000) * -1
const date = new Date(now.getTime() + offset + (seconds * 1000))

return date
}

module.exports.convertToString = function (err) {
return JSON.stringify(err, Object.getOwnPropertyNames(err))
const convertToString = (error) => {
return JSON.stringify(error, Object.getOwnPropertyNames(error))
}

module.exports = {
generateSessionExirationDate,
convertToString
}
62 changes: 32 additions & 30 deletions util-file.js
@@ -1,41 +1,43 @@
var fs = require('fs')
var uc = require('./util-common.js')
const util = require('util')
const fs = require('fs')
const path = require('path')
const { convertToString, generateSessionExirationDate } = require('./util-common.js')

module.exports.convertToString = function (err) {
return uc.convertToString(err)
}
const readConfigurationFromFile = () => {
const readFile = util.promisify(fs.readFile)

module.exports.generateSessionExirationDate = function (seconds) {
return uc.generateSessionExirationDate(seconds)
return readFile(path.join(process.cwd(), './configuration.json'))
}

module.exports.getConfiguration = function (callback) {

fs.readFile('configuration.json', 'utf8', function (err, data) {
if (err) {
return callback(err)
}
const writeConfigurationToFile = (configuration) => {
const configurationAsString = JSON.stringify(configuration, null, 4)
const writeFile = util.promisify(fs.writeFile)

try {
var configuration = JSON.parse(data)
} catch (exception) {
return callback(exception)
}
return writeFile(path.join(process.cwd(), './configuration.json'), configurationAsString)
}

callback(null, configuration)
const getConfiguration = (callback) => {
readConfigurationFromFile().then((data) => {
callback(null, JSON.parse(data.toString()))
}).catch((error) => {
console.log(error)
return callback(error)
})

}

exports.setConfiguration = function (configuration, callback) {
var configurationAsString = JSON.stringify(configuration, null, 4)

fs.writeFile('configuration.json', configurationAsString, function (err) {
if (err) {
callback(err)
} else {
callback(null)
}
const setConfiguration = (configuration, callback) => {
writeConfigurationToFile(configuration).then(() => {
callback(null)
}).catch((error) => {
return callback(error)
})

}

module.exports = {
convertToString,
generateSessionExirationDate,
readConfigurationFromFile,
writeConfigurationToFile,
getConfiguration,
setConfiguration
}
112 changes: 61 additions & 51 deletions util-pg.js
@@ -1,65 +1,75 @@
var pg = require('pg')
var uc = require('./util-common.js')

module.exports.convertToString = function (err) {
return uc.convertToString(err)
}
const { Client } = require('pg')
const { convertToString, generateSessionExirationDate } = require('./util-common.js')

const getConfiguration = (callback) => {
const client = createClient()

client.connect().then(() => {
return readConfiguration(client)
}).then((result) => {
if (result.rows.length === 1) {
callback(null, JSON.parse(result.rows[0].data))
} else {
callback(new Error(`configuration invalid, ${result.rows.length} rows found`))
}
}).catch((error) => {
return callback(error)
})

module.exports.generateSessionExirationDate = function (seconds) {
return uc.generateSessionExirationDate(seconds)
}

module.exports.getConfiguration = function (callback) {

pg.connect(process.env.DATABASE_URL, function (err, client, done) {

client.query('SELECT * FROM configuration', function (err, result) {
done()
const setConfiguration = (configuration, callback) => {
const configurationAsString = JSON.stringify(configuration, null, 4)

if (err) {
return callback(err)
} else {
if (result.rows.length) {
callback(null, JSON.parse(result.rows[0].data))
} else {
callback(new Error('configuration database is empty'))
}
}

})
const client = createClient()

client.connect().then(() => {
return truncateTable(client)
}).then((result) => {
return writeConfiguration(client, configurationAsString)
}).then((result) => {
return callback(null)
}).catch((error) => {
console.log(error)
return callback(error)
})

}

exports.setConfiguration = function (configuration, callback) {
var configurationAsString = JSON.stringify(configuration, null, 4)

pg.connect(process.env.DATABASE_URL, function (err, client, done) {

client.query('TRUNCATE configuration', function (err, result) {

if (err) {
return callback (err)
} else {

client.query('INSERT INTO configuration(data) values($1)', [configurationAsString],
function (err, result) {
done()

if (err) {
callback(err)
} else {
callback(null)
}
const createClient = () => {
return new Client({
connectionString: process.env.DATABASE_URL,
})
}

}
)
const createTableIfNotExists = (client) => {
return client.query('CREATE TABLE IF NOT EXISTS configuration (id serial, data text)')
}

}
const truncateTable = (client) => {
return client.query('TRUNCATE configuration')
}

})
const writeConfiguration = (client, configuration) => {
const query = {
text: 'INSERT INTO configuration(data) values($1)',
values: [configuration],
}

})
return client.query(query)
}

const readConfiguration = (client) => {
return client.query('SELECT * FROM configuration')
}

module.exports = {
convertToString,
generateSessionExirationDate,
createClient,
createTableIfNotExists,
truncateTable,
writeConfiguration,
readConfiguration,
getConfiguration,
setConfiguration
}

0 comments on commit 50f1338

Please sign in to comment.