Skip to content

Commit e1956e1

Browse files
committed
[feature firebase-migration]: migrating Players service
1 parent 769339b commit e1956e1

File tree

6 files changed

+115
-150
lines changed

6 files changed

+115
-150
lines changed

app/scripts/app.js

+2-17
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,8 @@
1111
})
1212
.config(config);
1313

14-
config.$inject = ['$routeProvider', '$httpProvider', 'BASE_URL', 'PlayersProvider', 'GamesProvider', 'jrgGoogleAuthProvider', 'UtilsProvider'];
15-
function config($routeProvider, $httpProvider, BASE_URL, PlayersProvider, GamesProvider, jrgGoogleAuthProvider, utilsProvider) {
16-
var env = "DEV";
17-
18-
PlayersProvider.setBaseUrl( BASE_URL[env] );
19-
GamesProvider.setBaseUrl( BASE_URL[env] );
20-
21-
jrgGoogleAuthProvider.configure({
22-
client_id: '1053634869128-rj5rm5ilcdna5rhcp2n6ank7tj1j4rdq.apps.googleusercontent.com',
23-
scope: 'profile email https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read'
24-
});
25-
26-
// Register interceptor
27-
$httpProvider.interceptors.push( 'authInterceptor' );
28-
29-
$httpProvider.defaults.headers.post.Authorization = $httpProvider.defaults.headers.put.Authorization = utilsProvider.getToken();
30-
14+
config.$inject = ['$routeProvider'];
15+
function config($routeProvider) {
3116
$routeProvider.when('/game/:gameId', {
3217
templateUrl: 'partials/partial1.html',
3318
controller: 'PokerManagerCtrl',

app/scripts/auth/login-ctrl.js

+12-74
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
angular.module( 'pokerManager' ).
88
controller( 'LoginCtrl', LoginController );
99

10-
LoginController.$inject = [ '$scope', '$q', 'userService', 'Players', 'Ref', 'jrgGoogleAuth' ];
10+
LoginController.$inject = [ 'userService', 'Players' ];
1111

12-
function LoginController( $scope, $q, userService, Players, Ref, jrgGoogleAuth ) {
12+
function LoginController( userService, Players ) {
1313
var vm = this;
1414

1515
vm.signIn = signIn;
@@ -19,90 +19,28 @@ function LoginController( $scope, $q, userService, Players, Ref, jrgGoogleAuth )
1919
function signIn(provider) {
2020
userService.login(provider)
2121
.then(obtainedUserInfo)
22-
.catch(failedToLogin);
22+
.catch( function ( error ) {
23+
console.log( error );
24+
} );
2325
}
2426

2527
function signOut() {
2628
// TODO(idan): Add analytics event
27-
jrgGoogleAuth.logout().then( function () {
28-
Auth.revokeToken().then( function () {
29-
delete vm.user;
30-
} );
31-
} );
32-
}
33-
34-
$scope.$on( 'event:google-plus-signin-success', function googleLoginSuccess( event, data ) {
35-
console.log( 'Successful login: ', data );
36-
jrgGoogleAuth.loggedIn( data ).then( successfulLogin ).catch( failedLogin );
37-
} );
38-
39-
$scope.$on( 'event:google-plus-signin-failure', function googleLoginFailure( event, data ) {
40-
// TODO(idan): Add analytics event
41-
console.error( 'Authentication failure', data );
42-
Auth.revokeToken().then( function () {
43-
delete vm.user;
44-
} );
45-
} );
46-
47-
function loggedIn( userInfo ) {
48-
console.log(userInfo);
49-
Auth.save().then(obtainedUserInfo);
50-
}
51-
52-
function failedToLogin( authError ) {
53-
console.log(authError);
29+
userService.logout();
30+
delete vm.user;
5431
}
5532

5633
function obtainedUserInfo( user ) {
5734
var player = {
5835
name: user[user.provider].displayName,
5936
email: user[user.provider].email,
6037
imageUrl: user[user.provider].profileImageURL
61-
},
62-
extendedUser = angular.extend({}, user, player);
63-
console.log(user);
64-
// Save user as a player
65-
$q(function (resolve) {
66-
Ref.child('player').child(user.uid).set(player, resolve);
67-
}).then(function () {
68-
vm.user = extendedUser;
69-
});
70-
}
71-
72-
function successfulLogin( userInfo ) {
73-
console.log( 'Successfully fetched user data: ', userInfo );
74-
var players = Players.fetchedPlayers(),
75-
tokenToSave = {
76-
authToken: userInfo.authToken,
77-
tokenSourceId: 1
78-
},
79-
playerId = 0;
80-
81-
// Find player's id
82-
if ( players ) {
83-
players.some( function ( player ) {
84-
if ( player.email === userInfo.email ) {
85-
playerId = player.id;
86-
return true;
87-
}
88-
return false;
89-
} );
90-
}
91-
92-
userInfo.id = playerId;
93-
tokenToSave.playerId = playerId;
94-
tokenToSave.player = userInfo;
38+
};
9539

96-
Auth.save( tokenToSave, function ( theUser ) {
97-
vm.user = theUser;
98-
} );
99-
}
100-
101-
function failedLogin( authError ) {
102-
console.log( authError );
103-
Auth.revokeToken().then( function () {
104-
delete vm.user;
105-
} );
40+
vm.user = angular.extend({}, user, player);
41+
console.log(vm.user);
42+
// Save user as a player
43+
Players.matchUserToPlayer( vm.user );
10644
}
10745
}
10846
})();

app/scripts/auth/user.service.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
.module( 'pokerManager.services' )
44
.service( 'userService', UserService );
55

6-
UserService.$inject = [ '$q', 'Auth', 'GOOGLE_AUTH_SCOPES' ];
7-
function UserService( $q, Auth, GOOGLE_AUTH_SCOPES ) {
8-
var service = this;
6+
UserService.$inject = [ '$q', 'Auth', 'Ref', '$firebaseObject', 'GOOGLE_AUTH_SCOPES' ];
7+
function UserService( $q, Auth, Ref, $firebaseObject, GOOGLE_AUTH_SCOPES ) {
8+
var service = this,
9+
users = $firebaseObject( Ref.child( 'users' ) );
910

1011
service.login = login;
1112
service.logout = logout;
@@ -26,9 +27,10 @@
2627
}
2728

2829
function save() {
29-
return $q.when( Auth.$requireAuth() )
30+
return $q.when( Auth.$waitForAuth() )
3031
.then(function ( user ) {
3132
service.user = user;
33+
users[user.uid] = user;
3234
return service.user;
3335
});
3436
}

app/scripts/controllers.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
$scope.$watch( function () {
3737
return $scope.isAdmin();
3838
}, function ( newVal ) {
39-
if ( newVal && $scope.tabs.length < 2 ) {
39+
if ( newVal && $scope.tabs.indexOf(adminTab) === -1 ) {
4040
$scope.tabs.push( adminTab );
4141
} else {
4242
var adminTabIdx = $scope.tabs.indexOf( adminTab );

app/scripts/manager/manager-ctrl.js

+2-8
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ angular.module( 'pokerManager' ).
9494

9595
if ( foundPlayer ) {
9696
// Copy fields from saved game
97-
var isPlaying = vm.game.players[ i ].isPlaying,
97+
var //isPlaying = vm.game.players[ i ].isPlaying,
9898
buyin = vm.game.players[ i ].buyin,
9999
buyout = vm.game.players[ i ].buyout,
100100
currentChipCount = vm.game.players[ i ].currentChipCount * ( ( oldChipValue != newChipValue ) ? oldChipValue / newChipValue : 1 ),
@@ -114,13 +114,7 @@ angular.module( 'pokerManager' ).
114114

115115
function init() {
116116
//Refresh view
117-
vm.players = Players.query( function () {
118-
if ( localStorage.getItem( 'game' ) !== null ) {
119-
vm.loadLocalStorageGame();
120-
}
121-
}, function ( err ) {
122-
console.log( err );
123-
} );
117+
vm.players = Players.players;
124118
}
125119

126120
function refreshPlayersList() {

app/scripts/services/players-svc.js

+92-46
Original file line numberDiff line numberDiff line change
@@ -3,60 +3,106 @@
33
/**
44
* Players services
55
*/
6-
angular.module( 'pokerManager.services' ).
7-
provider( 'Players', PlayersProvider);
6+
angular.module( 'pokerManager' ).
7+
provider( 'Players', PlayersProvider );
88

9+
PlayersProvider.$inject = [];
910
function PlayersProvider() {
1011

1112
var baseUrl = '',
12-
self = this;
13+
provider = this;
1314

14-
self.setBaseUrl = function ( aBaseUrl ) {
15+
provider.setBaseUrl = function ( aBaseUrl ) {
1516
baseUrl = aBaseUrl;
1617
};
1718

18-
self.players = [];
19-
20-
self.$get = PlayersService;
21-
22-
PlayersService.$inject = [ '$resource', '$filter' ];
23-
24-
function PlayersService( $resource, $filter ) {
25-
var Resource = $resource( baseUrl + 'players/:playerId', {playerId: '@id'}, {
26-
'update': {method: 'PUT'}
27-
}),
28-
_query = Resource.query;
29-
30-
Resource.query = function ( successCallback, errorCallback ) {
31-
return _query( function ( players ) {
32-
self.players = players;
33-
if ( successCallback ) {
34-
successCallback( players );
35-
}
36-
}, errorCallback );
37-
};
38-
self.players = Resource.query();
39-
40-
Resource.create = function () {
41-
return angular.element.extend( new Resource(), {
42-
name: '',
43-
balance: 0,
44-
isPlaying: false,
45-
buyin: 0,
46-
currentChipCount: 0,
47-
email: '',
48-
phone:'',
49-
id: 0,
50-
createDate: $filter( 'date' )( new Date(), 'y-MM-dd' ),
51-
isNew: true
52-
} );
53-
};
54-
55-
Resource.fetchedPlayers = function () {
56-
return self.players;
57-
};
58-
59-
return Resource;
19+
provider.$get = PlayersService;
20+
21+
PlayersService.$inject = [ '$resource', '$filter', '$q', 'Ref', '$firebaseArray' ];
22+
23+
function PlayersService( $resource, $filter, $q, Ref, $firebaseArray ) {
24+
var service = {
25+
create: create,
26+
save: save,
27+
findBy: findBy,
28+
matchUserToPlayer: matchUserToPlayer,
29+
players: $firebaseArray( Ref.child( 'players' ) )
30+
};
31+
32+
service.fetchedPlayers = function () {
33+
return service.players;
34+
};
35+
36+
function create() {
37+
return {
38+
name: '',
39+
balance: 0,
40+
isPlaying: false,
41+
buyin: 0,
42+
currentChipCount: 0,
43+
email: '',
44+
phone:'',
45+
id: 0,
46+
createDate: new Date(),
47+
isNew: true
48+
};
49+
}
50+
51+
function save( player ) {
52+
var toSave = preSave( player );
53+
}
54+
55+
function preSave( player ) {
56+
var clone = angular.extend( {}, player );
57+
delete clone.currentChipCount;
58+
delete clone.id;
59+
delete clone.isNew;
60+
61+
clone.createDate = player.createDate.getTime();
62+
63+
return clone;
64+
}
65+
66+
function findBy( field, value ) {
67+
return $q( function ( resolve ) {
68+
service.players.$ref().off('child_added');
69+
service.players.$ref()
70+
.orderByChild( field )
71+
.equalTo( value )
72+
.on( 'child_added', resolve );
73+
} );
74+
}
75+
76+
function matchUserToPlayer( user ) {
77+
return findBy( 'email', user.email )
78+
.then(addUser);
79+
80+
function addUser( player ) {
81+
var userToMatch = {},
82+
idx = service.players.$indexFor( player.key() );
83+
84+
// Stop listening
85+
service.players.$ref().off('child_added');
86+
87+
userToMatch[user.uid] = true;
88+
89+
if ( idx !== -1 ) {
90+
service.players[ idx ].user = userToMatch;
91+
service.players.$save( idx );
92+
} else {
93+
var newPlayer = preSave( create() );
94+
newPlayer.user = userToMatch;
95+
newPlayer.name = user.name;
96+
newPlayer.email = user.email;
97+
service.players.$add( newPlayer )
98+
.catch(function ( error ) {
99+
console.log( error );
100+
} );
101+
}
102+
}
103+
}
104+
105+
return service;
60106
}
61107
}
62108
})();

0 commit comments

Comments
 (0)