Skip to content

Commit 34fbf25

Browse files
committed
[feature firebase-migration]:
Register players to communities Get players of community Go to game from community
1 parent a388355 commit 34fbf25

File tree

6 files changed

+137
-41
lines changed

6 files changed

+137
-41
lines changed

app/scripts/auth/login-ctrl.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function LoginController( userService, Players ) {
4040
vm.user = angular.extend({}, user, player);
4141
console.log(vm.user);
4242
// Save user as a player
43-
Players.matchUserToPlayer( vm.user );
43+
return Players.matchUserToPlayer( vm.user );
4444
}
4545
}
4646
})();

app/scripts/communities/communities.ctrl.js

+48-16
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,21 @@
33
.module( 'pokerManager' )
44
.controller( 'CommunitiesCtrl', CommunitiesController );
55

6-
CommunitiesController.$inject = [ 'communitiesSvc', 'userService', 'Ref' ];
7-
function CommunitiesController( communitiesSvc, userService, Ref ) {
6+
CommunitiesController.$inject = [ 'communitiesSvc', 'userService', 'Players', 'playerModal', 'Ref' ];
7+
function CommunitiesController( communitiesSvc, userService, Players, playerModal, Ref ) {
88
var vm = this,
99
collapseState = {};
1010

1111
vm.newCommunity = '';
1212
vm.inputDisabled = false;
13+
vm.communityDropdownOpen = false;
1314
vm.communities = communitiesSvc.communities;
1415
vm.add = add;
1516
vm.isCollapsed = isCollapsed;
1617
vm.toggleCollapsed = toggleCollapsed;
18+
vm.communitiesDropdownToggle = communitiesDropdownToggle;
19+
vm.userUid = userService.getUser() && userService.getUser().uid;
20+
vm.addMember = addMember;
1721

1822
vm.communities.$loaded().then( function () {
1923
vm.communities.forEach( function ( community ) {
@@ -26,36 +30,64 @@
2630
user = userService.getUser();
2731
if ( vm.newCommunity ) {
2832
community.name = vm.newCommunity;
29-
community.admins = {};
30-
community.members = {};
31-
community.admins[user.uid] = {
32-
name: user[user.provider].displayName
33-
};
34-
community.members[user.uid] = {
35-
name: user[user.provider].displayName
36-
};
3733
vm.communities.$add( community )
3834
.then( function ( ref ) {
39-
var membership = {};
40-
membership[ref.key()] = {
41-
name: vm.newCommunity
42-
};
43-
vm.newCommunity = '';
4435
collapseState[ref.key()] = false;
45-
Ref.child('player/' + user.uid).child('memberIn').set( membership );
36+
Players.findBy( 'userUid', user.uid ).then( function ( playerSnapshot ) {
37+
var membership = {},
38+
playerUid = playerSnapshot.key(),
39+
player = playerSnapshot.val(),
40+
admins = {};
41+
membership[ref.key()] = vm.newCommunity;
42+
playerSnapshot.ref().child( 'memberIn' ).set( membership );
43+
44+
admins[playerUid] = player.name;
45+
ref.child( 'admins' ).set( admins );
46+
ref.child( 'members' ).set( admins );
47+
48+
vm.newCommunity = '';
49+
} );
4650
} )
4751
.finally( function () {
4852
vm.inputDisabled = false;
4953
} );
5054
}
5155
}
5256

57+
function join() {
58+
//userService
59+
}
60+
61+
function addMember( community ) {
62+
playerModal.open()
63+
.then( function ( player ) {
64+
return Players.save( player );
65+
} )
66+
.then( function ( savedPlayer ) {
67+
var idx = vm.communities.$indexFor( community.$id ),
68+
membership = {};
69+
70+
membership[ community.$id ] = community.name;
71+
if ( idx !== -1 ) {
72+
savedPlayer.once( 'value', function ( snap ) {
73+
vm.communities[ idx ].members[ snap.key() ] = snap.child( 'name' ).val();
74+
vm.communities.$save( idx );
75+
} );
76+
Ref.child( 'players/' + savedPlayer.key() ).child( 'memberIn' ).set( membership );
77+
}
78+
} );
79+
}
80+
5381
function isCollapsed( communityId ) {
5482
return collapseState[communityId];
5583
}
5684

5785
function toggleCollapsed( communityId ) {
5886
collapseState[communityId] = !collapseState[communityId];
5987
}
88+
89+
function communitiesDropdownToggle() {
90+
vm.communityDropdownOpen = !vm.communityDropdownOpen;
91+
}
6092
}
6193
}());

app/scripts/communities/communities.service.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,17 @@
55

66
CommunitiesService.$inject = ['Ref', '$firebaseArray'];
77
function CommunitiesService(Ref, $firebaseArray) {
8-
var service = this;
8+
var service = this,
9+
selectedCommunityIdx = 0;
910

1011
service.communities = $firebaseArray(Ref.child('communities'));
12+
13+
service.setSelectedCommunity = function ( idx ) {
14+
selectedCommunityIdx = idx;
15+
};
16+
17+
service.getSelectedCommunity = function () {
18+
return service.communities[ selectedCommunityIdx ];
19+
};
1120
}
1221
}());

app/scripts/communities/communities.view.html

+29-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,22 @@
11
<div class="container">
2+
<div class="row">
3+
<div class="col-md-6 col-md-offset-3">
4+
<h2>Welcome to Pokermunity</h2>
5+
<div class="btn-group btn-group-justified">
6+
<div class="btn-group btn-group-lg">
7+
<button class="btn btn-default btn-block" ng-click="vm.add()">Create a community</button>
8+
</div>
9+
<div class="btn-group btn-group-lg" ng-class="{'open': vm.communityDropdownOpen}">
10+
<button class="btn btn-default btn-block dropdown-toggle" ng-click="vm.communitiesDropdownToggle()">Join a community <span class="caret"></span></button>
11+
<ul class="dropdown-menu">
12+
<li ng-repeat="community in vm.communities">
13+
<a ng-click="vm.join( community )">{{ community.name }} <em ng-show="vm.admins[$index]">(administered by adminhere)</em></a>
14+
</li>
15+
</ul>
16+
</div>
17+
</div>
18+
</div>
19+
</div>
220
<div class="row">
321
<div class="col-xs-8">
422
<input class="form-control" type="text" ng-model="vm.newCommunity" placeholder="Community name">
@@ -16,10 +34,20 @@ <h4 class="panel-title">
1634
<a role="button" aria-expanded="true" aria-controls="collapseOne">
1735
{{ community.name }}
1836
</a>
37+
<button class="btn btn-sm btn-success" ng-click="vm.addMember( community )">Add members</button>
1938
</h4>
2039
</div>
2140
<div class="panel-collapse collapse" ng-class="{'in': vm.isCollapsed( community.$id )}" role="tabpanel" aria-labelledby="headingOne">
22-
<button class="btn btn-link" ng-repeat="player in community.members">{{ player }}</button>
41+
<div class="row">
42+
<div class="col-xs-12">
43+
<button class="btn btn-link" ng-repeat="player in community.members">{{ player }}</button>
44+
</div>
45+
</div>
46+
<div class="row">
47+
<div class="col-xs-12">
48+
<a href="#/game/0" class="btn btn-success">Start a new game</a>
49+
</div>
50+
</div>
2351
</div>
2452
</div>
2553
</div>

app/scripts/manager/manager-ctrl.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
angular.module( 'pokerManager' ).
66
controller( 'PokerManagerCtrl', PokerManagerController );
77

8-
PokerManagerController.$inject = [ '$scope', '$filter', '$analytics', 'toaster', 'Utils', 'Players', 'Games', 'playerModal' ];
8+
PokerManagerController.$inject = [ '$scope', '$filter', '$analytics', 'toaster', 'Utils', 'Players', 'Games', 'playerModal', 'communitiesSvc' ];
99

10-
function PokerManagerController( $scope, $filter, $analytics, toaster, utils, Players, Games, playerModal ) {
10+
function PokerManagerController( $scope, $filter, $analytics, toaster, utils, Players, Games, playerModal, communitiesSvc ) {
1111
'use strict';
1212

1313
var vm = this;
@@ -94,7 +94,9 @@ angular.module( 'pokerManager' ).
9494

9595
function init() {
9696
//Refresh view
97-
vm.players = Players.players;
97+
Players.playersOfCommunity( communitiesSvc.getSelectedCommunity() ).then( function ( players ) {
98+
vm.players = players;
99+
} );
98100
}
99101

100102
function refreshPlayersList() {

app/scripts/services/players-svc.js

+44-19
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ angular.module( 'pokerManager' ).
1818

1919
provider.$get = PlayersService;
2020

21-
PlayersService.$inject = [ '$resource', '$filter', '$q', 'Ref', '$firebaseArray' ];
21+
PlayersService.$inject = [ '$q', 'Ref', '$firebaseArray' ];
2222

23-
function PlayersService( $resource, $filter, $q, Ref, $firebaseArray ) {
23+
function PlayersService( $q, Ref, $firebaseArray ) {
2424
var service = {
2525
create: create,
2626
save: save,
27+
playersOfCommunity: playersOfCommunity,
2728
findBy: findBy,
2829
matchUserToPlayer: matchUserToPlayer,
2930
players: $firebaseArray( Ref.child( 'players' ) )
@@ -42,58 +43,82 @@ angular.module( 'pokerManager' ).
4243
currentChipCount: 0,
4344
email: '',
4445
phone:'',
45-
id: 0,
4646
createDate: new Date(),
4747
isNew: true
4848
};
4949
}
5050

5151
function save( player ) {
5252
var toSave = preSave( player );
53+
return service.players.$add( toSave );
5354
}
5455

5556
function preSave( player ) {
5657
var clone = angular.extend( {}, player );
57-
delete clone.currentChipCount;
58-
delete clone.id;
59-
delete clone.isNew;
6058

6159
clone.createDate = player.createDate.getTime();
6260

6361
return clone;
6462
}
6563

64+
function playersOfCommunity( community ) {
65+
var playerIds = Object.keys( community.members ),
66+
baseRef = Ref.child( 'players' ),
67+
players = [];
68+
69+
return $q(function (resolve) {
70+
playerIds.forEach(function (playerId) {
71+
baseRef.child(playerId).once('value', function (snap) {
72+
players.push( snap.val() );
73+
74+
if (players.length === playerIds.length) {
75+
resolve( players );
76+
}
77+
});
78+
});
79+
});
80+
}
81+
6682
function findBy( field, value ) {
6783
return $q( function ( resolve ) {
68-
service.players.$ref().off('child_added');
84+
service.players.$ref().off('value');
6985
service.players.$ref()
7086
.orderByChild( field )
7187
.equalTo( value )
72-
.on( 'child_added', resolve );
88+
.on( 'value', function ( querySnapshot ) {
89+
if ( querySnapshot.hasChildren() ) {
90+
querySnapshot.forEach( function ( playerSnap ) {
91+
resolve( playerSnap );
92+
} );
93+
} else {
94+
resolve();
95+
}
96+
} );
7397
} );
7498
}
7599

76100
function matchUserToPlayer( user ) {
77101
return findBy( 'email', user.email )
78102
.then(addUser);
79103

80-
function addUser( player ) {
81-
var userToMatch = {},
82-
idx = service.players.$indexFor( player.key() );
104+
function addUser( playerSnapshot ) {
105+
var idx = -1;
83106

84107
// 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 );
108+
service.players.$ref().off( 'value' );
109+
110+
if ( playerSnapshot ) {
111+
idx = service.players.$indexFor( playerSnapshot.key() );
112+
if ( idx !== -1 ) {
113+
service.players[ idx ].userUid = user.uid;
114+
service.players.$save( idx );
115+
}
92116
} else {
93117
var newPlayer = preSave( create() );
94-
newPlayer.user = userToMatch;
118+
newPlayer.userUid = user.uid;
95119
newPlayer.name = user.name;
96120
newPlayer.email = user.email;
121+
newPlayer.imageUrl = user.imageUrl;
97122
service.players.$add( newPlayer )
98123
.catch(function ( error ) {
99124
console.log( error );

0 commit comments

Comments
 (0)