Skip to content

Instantly share code, notes, and snippets.

@Liampronan
Created January 3, 2016 07:37
Show Gist options
  • Save Liampronan/ded62213a679dba32eaf to your computer and use it in GitHub Desktop.
Save Liampronan/ded62213a679dba32eaf to your computer and use it in GitHub Desktop.
var objectToFirebase = require('object-to-firebase');
var config = require('config');
var Firebase = require('firebase');
var rootRef = require('../services/firebaseAuthService').rootRef;
var messagesRef = rootRef.child('messages');
var usersRef = rootRef.child('users');
var Backbone = require('backbone');
var Q = require('q');
require('../services/backbonefire'); //
var User = Backbone.Firebase.Model.extend({
initialize: function(userKey){
console.log('User model has been initialized!');
// var defaults = {
// "fromUser": "hellooo"
// };
this.url = getUserRef(userKey);
// Backbone.View.prototype.initialize.call(this);
// if (!id) this.set({"fromUser": "Liam"}) ;
},
createTestUser: createTestUser,
setUserRef: setUserRef
}, {
findByMessageThreadId: findByMessageThreadId,
findByKey: findByKey,
usersRef: usersRef
});
//returns Firebase ref for message -- whether new or existing
function getUserRef(userKey){
var userRef;
if (userKey){
userRef = usersRef.child(userKey);
} else {
//new message
userRef = usersRef.push();
}
return userRef;
}
function setUserRef(userKey){
console.log(userKey);
this.url = getUserRef(userKey);
}
function findByMessageThreadId(messageThreadId){
console.log("searching?: " + messageThreadId);
usersRef.orderByChild("messageThreads").once("value", function(dataSnap){
console.log(dataSnap.key());
dataSnap.forEach(function(user){
console.log(user.val());
})
});
}
function findByKey(userKey){
var deferred = Q.defer();
usersRef.child(userKey).once("value", function(dataSnap){
var user = initWithSnapshot(dataSnap);
deferred.resolve(user);
});
return deferred.promise;
}
function initWithSnapshot(userSnap){
var userKey = userSnap.key(); //key is the messageThreadKey (i.e., contains messages)
var userSnapVal = userSnap.val();
var user = new User(userKey);
user.set('createdAt', userSnapVal.createdAt);
user.set('email', userSnapVal.email);
user.set('firstName', userSnapVal.firstName);
user.set('lastName', userSnapVal.lastName);
user.set('lastName', userSnapVal.lastName);
user.set('messageThreads', userSnapVal.messageThreads);
user.set('schoolName', userSnapVal.schoolName);
user.set('status', userSnapVal.status);
user.set('key', userKey);
return user;
}
//creates a user on firebase and saves them to /users node
//as of now, only used for creating test users (real users created via iOS)
function createTestUser(email){
var deferred = Q.defer();
var testingPassword = "testtest";
var userEmail;
if (!email) {
userEmail= this.get('email');
} else {
userEmail = email;
}
console.log("creating test user: " + userEmail);
rootRef.createUser({email: userEmail, password: testingPassword}, function(err, userData){
if (err){
//if user alredy exists, remove them so we can resign up that user.
//Again, this is a TESTING ONLY METHOD
if (err.code === "EMAIL_TAKEN"){
console.log("user exists... deleting and retrying... for: " + userEmail);
setTimeout(function(){
rootRef.removeUser({email: userEmail, password: testingPassword}, function(err){
createTestUser(userEmail).then(function(userData){
deferred.resolve(userData)
})
});
}, 1000);
} else {
deferred.reject(err);
}
} else {
console.log("successfully created test user: " + userEmail);
deferred.resolve(userData);
}
});
return deferred.promise;
}
module.exports = User;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment