From 6e2b3a805e09a4fd9ab7de6bedce3ab87957c3d2 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 6 Sep 2015 19:44:55 +0200 Subject: [PATCH] migration to sync groups with firebase --- .../20150906_sync_groups_with_firebase.js | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 migrations/20150906_sync_groups_with_firebase.js diff --git a/migrations/20150906_sync_groups_with_firebase.js b/migrations/20150906_sync_groups_with_firebase.js new file mode 100644 index 0000000000..47bf1a9ce8 --- /dev/null +++ b/migrations/20150906_sync_groups_with_firebase.js @@ -0,0 +1,42 @@ +/* + * Sync groups with Firebase + */ + +var mongo = require('mongoskin'); +var Firebase = require('Firebase'); + +var dbserver = 'mongodb://url'; +var dbname = 'db'; + +var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect'); +var dbGroups = db.collection('groups'); +var countGroups = 0; + +var firebaseRef = new Firebase('https://' + 'firebase-app' + '.firebaseio.com'); + +// TODO handle sync errors with firebase? +firebaseRef.authWithCustomToken('firebase-secret', function(err, authData){ + if(err) throw new Error('Impossible to authenticate Firebase'); + + console.log('Firebase connected, begins work on db'); + + dbGroups.findEach({}, {_id: 1, members: 1}, {batchSize: 100}, function(err, group){ + if(err) throw err; + + countGroups++; + console.log('Group: ', countGroups); + + firebaseRef.child('rooms/' + group._id) + .set({ + name: group.name + }); + + group.members.forEach(function(member){ + firebaseRef.child('members/' + group._id + '/' + userId) + .set(true); + + firebaseRef.child('users/' + member + '/rooms/' + group._id) + .set(true); + }); + }); +}); \ No newline at end of file