WIP migrations

This commit is contained in:
Josh Harvey 2014-11-20 00:40:27 -05:00
parent e650e591d5
commit 7a2ab111d6
3 changed files with 38 additions and 107 deletions

View file

@ -110,16 +110,16 @@ function silentQuery(client, queryStr, values, cb) {
}
// OPTIMIZE: No need to query bills if tx.fiat and tx.satoshis are set
function billsAndTxs(client, txid, currencyCode, deviceFingerprint, cb) {
function billsAndTxs(client, sessionId, currencyCode, deviceFingerprint, cb) {
var billsQuery = 'SELECT COALESCE(SUM(denomination), 0) as fiat, ' +
'COALESCE(SUM(satoshis), 0) AS satoshis ' +
'FROM bills ' +
'WHERE transaction_id=$1 AND currency_code=$2 AND device_fingerprint=$3';
var billsValues = [txid, currencyCode, deviceFingerprint];
var billsValues = [sessionId, currencyCode, deviceFingerprint];
var txQuery = 'SELECT COALESCE(SUM(fiat), 0) AS fiat, ' +
'COALESCE(SUM(satoshis), 0) AS satoshis ' +
'FROM transactions ' +
'WHERE txid=$1 AND currency_code=$2 AND device_fingerprint=$3';
'WHERE session_id=$1 AND currency_code=$2 AND device_fingerprint=$3';
var txValues = billsValues; // They happen to be the same
async.parallel([
@ -157,7 +157,7 @@ exports.pendingTxs = function pendingTxs(timeoutMS, cb) {
connect(function(err, client, done) {
var sql = 'SELECT * FROM transactions ' +
'WHERE status=$1 AND ' +
'EXTRACT(EPOCH FROM now() - created) > $2 ' +
'(NOT incoming OR EXTRACT(EPOCH FROM now() - created > $2) ' +
'ORDER BY created ASC';
var timeoutS = timeoutMS / 1000;
var values = ['pending', timeoutS];
@ -169,7 +169,7 @@ exports.pendingTxs = function pendingTxs(timeoutMS, cb) {
};
function removePendingTx(client, tx, cb) {
silentQuery(client, 'DELETE FROM transactions WHERE txid=$1 AND status=$2',
silentQuery(client, 'DELETE FROM transactions WHERE session_id=$1 AND status=$2',
[tx.txId, 'pending'], cb);
}
@ -187,9 +187,9 @@ function maybeInsertTx(client, deviceFingerprint, tx, totals, cb) {
function insertTx(client, deviceFingerprint, tx, satoshis, fiat, status, cb) {
var fields = [
'txid',
'session_id',
'status',
'tx_type',
'incoming',
'device_fingerprint',
'to_address',
'satoshis',
@ -200,7 +200,7 @@ function insertTx(client, deviceFingerprint, tx, satoshis, fiat, status, cb) {
var values = [
tx.txId,
status,
tx.tx_type || 'buy',
tx.incoming === false ? false : true,
deviceFingerprint,
tx.toAddress,
satoshis,
@ -211,16 +211,19 @@ function insertTx(client, deviceFingerprint, tx, satoshis, fiat, status, cb) {
query(client, getInsertQuery('transactions', fields, true), values, cb);
}
exports.addPendingTx = function addPendingTx(deviceFingerprint, tx) {
exports.addPendingTx = function addPendingTx(deviceFingerprint, tx, cb) {
connect(function(err, client, done) {
if (err) return;
insertTx(client, deviceFingerprint, tx, 0, 0, 'pending',
if (err) return cb(err);
insertTx(client, deviceFingerprint, tx, tx.satoshis, tx.fiat, 'pending',
function(err) {
done();
// If pending tx already exists, do nothing
if (err && PG_ERRORS[err.code] !== 'uniqueViolation')
if (err && PG_ERRORS[err.code] !== 'uniqueViolation') {
logger.error(err);
return cb(err);
}
cb();
});
});
};