Skip to content

Instantly share code, notes, and snippets.

@andrewvmail
Created May 31, 2015 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewvmail/2bc22da964003759475e to your computer and use it in GitHub Desktop.
Save andrewvmail/2bc22da964003759475e to your computer and use it in GitHub Desktop.
'use strict';
var base = process.env.PWD;
var _ = require('lodash');
module.exports = {
/**
* TODO: checkheader
* @param serviceProvider
*/
checkHeader: function checkHeader(serviceProvider) {
},
changeHeader: function changeHeader(serviceProvider, callback) {
var fs = require('fs');
var replaceStream = require('replacestream');
var wstream = fs.createWriteStream( base + '/history/rates/' + serviceProvider + '.csv' );
var rstream = fs.createReadStream( base + '/history/rates/' + serviceProvider + '.tmp').
pipe(replaceStream('Numberplan', 'Prefix', {limit: 1})).pipe(wstream) ;
wstream.on('error', function(e) { console.error(e); });
wstream.on('close', function () {
callback(null, serviceProvider );
});
},
toJSON: function toJSON(serviceProvider, callback) {
//Converter Class
var Converter = require("csvtojson").core.Converter;
var fs = require("fs");
var fileStream = fs.createReadStream('history/rates/' + serviceProvider + '.csv');
//new converter instance
var csvConverter = new Converter({constructResult: true});
var jsonObject = [];
//end_parsed will be emitted once parsing finished
csvConverter.on("end_parsed", function (jsonObj) {
jsonObject = jsonObj;
});
fileStream.pipe(csvConverter);
fileStream.on('close', function () {
callback(null, jsonObject);
});
},
//send JSON to couch server
toCouch: function toCouch(collection, serviceProvider, callback) {
console.log('TO COUCH');
function rateId(id) {
return "_rate::" + id;
}
function rateVersion(key, versionNumber) {
return key + "::v" + versionNumber;
}
var counter = 0;
//console.log('debug print', collection, serviceProvider)
collection.forEach(function(obj) {
//console.log(obj);
var errors = 0;
//console.log('counter', counter, serviceProvider, obj);
//Find the rate
sails.modelds['couchbase'].find(rateId(obj.Prefix)).exec(function(error,result) {
console.log('MOMO HELP ME!!!');
console.log(error);
//if(error) callback(error);
console.log('SEARCHING');
//If there is no rate in the database
//This means its the first version
if(!result[0] || result[0][0]) {
console.log('THERE IS NO RATE');
console.log('OR');
console.log('FUCKED UP DATA');
//Mockup an object for database insert.
var rate = {
id: rateId(obj.Prefix),
destination: obj.Destination,
prefix: obj.Prefix,
version: 1
}
//Set the service provider with the rate
rate[serviceProvider] = obj.Rate;
//If there are no results.
if(!result[0]) {
//Create a rate
//console.log(obj.Rate, obj.Prefix, obj.Destination);
sails.models['couchbase'].create(rate).exec(function (error, data) {
if (error) errors++;
counter++;
if (collection.length === counter) callback(null, errors);
});
}
//If fucked up data delete it.
else if(result[0][0]){
sails.models['couchbase'].upsert( rate ).exec(function(error, data) {
if(error) errors++;
counter++;
if(collection.length === counter) callback(null,errors);
});
}
}
//WHEN THERE IS A CHANGE TO THE RATE
else if(result[0][serviceProvider] !== obj.Rate) {
console.log('THERE IS A CHANGE', obj);
//Versioning of old rate prepare for database insert
//Keep version same dont change it here
var oldRate = _.clone(result[0], true);
oldRate.id = rateVersion(rateId(obj.Prefix), result[0].version );
oldRate.version = result[0].version;
//console.log('oldrateid', oldRate.id, oldRate);
//New Rate
var newRate = _.clone(result[0], true);
newRate[serviceProvider] = obj.Rate;
newRate.version++;
console.log('MORE..');
//Update the couchbase records
sails.models['couchbase'].update( rateId(obj.Prefix), newRate ).exec( function(error, data) {
if(error) errors++;
console.log('INSERT..',error, oldRate);
//Save the old versions old rate
sails.models['couchbase'].create( oldRate ).exec( function(error, data) {
if(error) errors++;
console.log(error,data);
counter++;
//IF the counter runs out then callbacks done import
if(collection.length === counter) callback(null,errors);
});
});
}
//WHEN THERE IS NO CHANGES TO THE RATE
else if(result[0][serviceProvider] === obj.Rate) {
console.log('No changes to the rate.', collection.length, counter);
counter++;
//Counter runs out go out callback
if(collection.length === counter) callback(null,errors);
}
console.log(counter);
//DEBUG
//console.log('obj, result', obj, '++++' ,result[0] );
});
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment