@@ -18,12 +18,13 @@ angular.module( 'pokerManager' ).
18
18
19
19
provider . $get = PlayersService ;
20
20
21
- PlayersService . $inject = [ '$resource' , '$filter' , '$ q', 'Ref' , '$firebaseArray' ] ;
21
+ PlayersService . $inject = [ '$q' , 'Ref' , '$firebaseArray' ] ;
22
22
23
- function PlayersService ( $resource , $filter , $ q, Ref , $firebaseArray ) {
23
+ function PlayersService ( $q , Ref , $firebaseArray ) {
24
24
var service = {
25
25
create : create ,
26
26
save : save ,
27
+ playersOfCommunity : playersOfCommunity ,
27
28
findBy : findBy ,
28
29
matchUserToPlayer : matchUserToPlayer ,
29
30
players : $firebaseArray ( Ref . child ( 'players' ) )
@@ -42,58 +43,82 @@ angular.module( 'pokerManager' ).
42
43
currentChipCount : 0 ,
43
44
email : '' ,
44
45
phone :'' ,
45
- id : 0 ,
46
46
createDate : new Date ( ) ,
47
47
isNew : true
48
48
} ;
49
49
}
50
50
51
51
function save ( player ) {
52
52
var toSave = preSave ( player ) ;
53
+ return service . players . $add ( toSave ) ;
53
54
}
54
55
55
56
function preSave ( player ) {
56
57
var clone = angular . extend ( { } , player ) ;
57
- delete clone . currentChipCount ;
58
- delete clone . id ;
59
- delete clone . isNew ;
60
58
61
59
clone . createDate = player . createDate . getTime ( ) ;
62
60
63
61
return clone ;
64
62
}
65
63
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
+
66
82
function findBy ( field , value ) {
67
83
return $q ( function ( resolve ) {
68
- service . players . $ref ( ) . off ( 'child_added ' ) ;
84
+ service . players . $ref ( ) . off ( 'value ' ) ;
69
85
service . players . $ref ( )
70
86
. orderByChild ( field )
71
87
. 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
+ } ) ;
73
97
} ) ;
74
98
}
75
99
76
100
function matchUserToPlayer ( user ) {
77
101
return findBy ( 'email' , user . email )
78
102
. then ( addUser ) ;
79
103
80
- function addUser ( player ) {
81
- var userToMatch = { } ,
82
- idx = service . players . $indexFor ( player . key ( ) ) ;
104
+ function addUser ( playerSnapshot ) {
105
+ var idx = - 1 ;
83
106
84
107
// 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
+ }
92
116
} else {
93
117
var newPlayer = preSave ( create ( ) ) ;
94
- newPlayer . user = userToMatch ;
118
+ newPlayer . userUid = user . uid ;
95
119
newPlayer . name = user . name ;
96
120
newPlayer . email = user . email ;
121
+ newPlayer . imageUrl = user . imageUrl ;
97
122
service . players . $add ( newPlayer )
98
123
. catch ( function ( error ) {
99
124
console . log ( error ) ;
0 commit comments