courtbot-engine-pg
Version:
Postgres support for courtbot-engine
205 lines (194 loc) • 7.48 kB
JavaScript
;
var pg = require("pg");
var courtbot = require("courtbot-engine");
var moment = require("moment");
var DBMigrate = require("db-migrate");
var log4js = require("log4js");
courtbot.setRegistrationSource(function (connectionString) {
function getRegistrationsByContact(contact, communication_type) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('SELECT * FROM registrations WHERE contact = $1 AND communication_type = $2', [contact, communication_type], function (err, result) {
done();
if (err) return reject(err);
resolve(result.rows);
});
});
});
}
return {
getRegistrationById: function getRegistrationById(id) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('SELECT * FROM registrations WHERE registration_id = $1', [id], function (err, result) {
done();
if (err) return reject(err);
if (result.rows.length == 1) {
resolve(result.rows[0]);
} else {
resolve();
}
});
});
});
},
getRegistrationsByContact: getRegistrationsByContact,
getRegistrationsByPhone: function getRegistrationsByPhone(phone) {
log4js.getLogger("deprecated-phone-registration").warning("getRegistrationsByPhone(phone) is deprecated, use getRegistrationsByContact(contact, communication_type)");
return getRegistrationsByContact(phone, "sms");
},
getRegistrationsByState: function getRegistrationsByState(state) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('SELECT * FROM registrations WHERE state = $1', [state], function (err, result) {
done();
if (err) return reject(err);
resolve(result.rows);
});
});
});
},
createRegistration: function createRegistration(registration) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('INSERT INTO registrations (contact, communication_type, name, state, case_number, create_date) VALUES ($1,$2,$3,$4,$5,$6) RETURNING registration_id', [registration.contact || registration.phone, registration.communication_type || "sms", registration.name, registration.state, registration.case_number, moment().toString()], function (err, result) {
done();
if (err) return reject(err);
if (result.rows.length == 1) {
resolve(result.rows[0].registration_id);
} else {
resolve();
}
});
});
});
},
updateRegistrationName: function updateRegistrationName(id, name) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('UPDATE registrations SET name = $2 WHERE registration_id = $1', [id, name], function (err, result) {
done();
if (err) return reject(err);
resolve(result);
});
});
});
},
updateRegistrationState: function updateRegistrationState(id, state) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('UPDATE registrations SET state = $2 WHERE registration_id = $1', [id, state], function (err, result) {
done();
if (err) return reject(err);
resolve(result);
});
});
});
},
getSentMessages: function getSentMessages(contact, case_number) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('SELECT * FROM sent_messages WHERE contact = $1 AND case_number = $2', [contact, case_number], function (err, result) {
done();
if (err) return reject(err);
resolve(result.rows);
});
});
});
},
getSentMessage: function getSentMessage(contact, communication_type, name, date, description, case_number) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('SELECT * FROM sent_messages WHERE contact = $1 AND date = $2 AND (description = $3 OR description IS NULL) AND communication_type = $4 AND name = $5 AND (case_number = $6 OR case_number IS NULL)', [contact, date, description, communication_type, name, case_number], function (err, result) {
done();
if (err) return reject(err);
resolve(result.rows);
});
});
});
},
createSentMessage: function createSentMessage(contact, communication_type, name, date, description, case_number) {
return new Promise(function (resolve, reject) {
pg.connect(connectionString, function (err, client, done) {
if (err) {
reject(err);
return;
}
client.query('INSERT INTO sent_messages (contact, communication_type, date, description, name, case_number) VALUES ($1,$2,$3,$4,$5,$6) RETURNING msg_id', [contact, communication_type, date, description, name, case_number], function (err, result) {
done();
if (err) return reject(err);
if (result.rows.length == 1) {
resolve(result.rows[0].message_id);
} else {
resolve();
}
});
});
});
},
migrate: function migrate() {
var dbmigrate = DBMigrate.getInstance(true, { cwd: __dirname + "/.." });
//monkey patch
/* eslint-disable no-console */
var oldLog = console.log;
var oldInfo = console.info;
var oldError = console.error;
var oldWarn = console.warn;
var logger = log4js.getLogger("db-migrate");
console.log = function () {
logger.debug.apply(logger, arguments);
};
console.info = function () {
logger.info.apply(logger, arguments);
};
console.error = function () {
logger.error.apply(logger, arguments);
};
console.warn = function () {
logger.warn.apply(logger, arguments);
};
return dbmigrate.up().then(function () {
//un-monkey patch
console.log = oldLog;
console.info = oldInfo;
console.error = oldError;
console.warn = oldWarn;
}).catch(function (err) {
logger.error("Error migrating: ", err);
});
/* eslint-enable no-console */
}
};
});