Created
May 31, 2015 08:46
-
-
Save andrewvmail/2bc22da964003759475e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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