@@ -12,6 +12,7 @@ abstract class SongFirebaseService {
1212 Future <Either > getPlayList ();
1313 Future <Either > addOrRemoveFavoriteSong (String songId);
1414 Future <bool > isFavoriteSong (String songId);
15+ Future <Either > getUserFavoriteSong ();
1516}
1617
1718class SongFirebaseServiceImpl extends SongFirebaseService {
@@ -93,7 +94,7 @@ class SongFirebaseServiceImpl extends SongFirebaseService {
9394
9495 late bool isFavorite;
9596
96- var user = await firebaseAuth.currentUser;
97+ var user = firebaseAuth.currentUser;
9798
9899 String uID = user! .uid;
99100
@@ -111,7 +112,11 @@ class SongFirebaseServiceImpl extends SongFirebaseService {
111112 await favoriteSongs.docs.first.reference.delete ();
112113 isFavorite = false ;
113114 } else {
114- await firebaseFirestore.collection ('Users' ).doc (uID).collection ('Favorites' ).add (
115+ await firebaseFirestore
116+ .collection ('Users' )
117+ .doc (uID)
118+ .collection ('Favorites' )
119+ .add (
115120 {
116121 'songId' : songId,
117122 'addedDate' : Timestamp .now (),
@@ -133,7 +138,7 @@ class SongFirebaseServiceImpl extends SongFirebaseService {
133138
134139 final FirebaseFirestore firebaseFirestore = FirebaseFirestore .instance;
135140
136- var user = await firebaseAuth.currentUser;
141+ var user = firebaseAuth.currentUser;
137142
138143 String uID = user! .uid;
139144
@@ -156,4 +161,38 @@ class SongFirebaseServiceImpl extends SongFirebaseService {
156161 return false ;
157162 }
158163 }
164+
165+ @override
166+ Future <Either > getUserFavoriteSong () async {
167+ try {
168+ List <SongEntity > favoriteSong = [];
169+ final FirebaseAuth firebaseAuth = FirebaseAuth .instance;
170+
171+ final FirebaseFirestore firebaseFirestore = FirebaseFirestore .instance;
172+
173+ var user = firebaseAuth.currentUser;
174+
175+ String uID = user! .uid;
176+
177+ QuerySnapshot favoriteSnapshot = await firebaseFirestore
178+ .collection ('Users' )
179+ .doc (uID)
180+ .collection ('Favorites' )
181+ .get ();
182+
183+ for (var element in favoriteSnapshot.docs) {
184+ String songId = element['songId' ];
185+ var song =
186+ await firebaseFirestore.collection ('Songs' ).doc (songId).get ();
187+ SongModel songModel = SongModel .fromJson (song.data ()! );
188+ songModel.isFavorite = true ;
189+ songModel.songId = songId;
190+ favoriteSong.add (songModel.toEntity ());
191+ }
192+
193+ return Right (favoriteSong);
194+ } catch (e) {
195+ return const Left ('An error occurred' );
196+ }
197+ }
159198}
0 commit comments