diff --git a/Sources/justMUSIC/lib/model/User.dart b/Sources/justMUSIC/lib/model/User.dart index def349a..2507da7 100644 --- a/Sources/justMUSIC/lib/model/User.dart +++ b/Sources/justMUSIC/lib/model/User.dart @@ -2,7 +2,6 @@ class User { final String _id; String _pseudo; String _uniquePseudo; - String _country; String _mail; String _pp; List _followers; @@ -10,7 +9,7 @@ class User { List _followed; // Constructor - User(this._id, this._pseudo, this._uniquePseudo, this._country, this._mail, + User(this._id, this._pseudo, this._uniquePseudo, this._mail, this._pp, this._followers, this._capsules, this._followed); //Getters and setters @@ -28,12 +27,6 @@ class User { _uniquePseudo = value; } - String get country => _country; - - set country(String value) { - _country = value; - } - String get mail => _mail; set mail(String value) { diff --git a/Sources/justMUSIC/lib/model/mapper/UserMapper.dart b/Sources/justMUSIC/lib/model/mapper/UserMapper.dart index 3e6f1c0..7d4c6c1 100644 --- a/Sources/justMUSIC/lib/model/mapper/UserMapper.dart +++ b/Sources/justMUSIC/lib/model/mapper/UserMapper.dart @@ -2,14 +2,12 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:justmusic/model/User.dart'; class UserMapper { - static User toModel(DocumentSnapshot> snapshot, - SnapshotOptions? options) { + static User toModel(DocumentSnapshot> snapshot) { final data = snapshot.data(); return User( snapshot.id, data?["pseudo"], data?["unique_id"], - data?["country"] ?? "", data?["mail"], data?["picture"], List.from(data?["followers"] as List), diff --git a/Sources/justMUSIC/lib/screens/add_friend_screen.dart b/Sources/justMUSIC/lib/screens/add_friend_screen.dart index 7c5c9ae..124f1fd 100644 --- a/Sources/justMUSIC/lib/screens/add_friend_screen.dart +++ b/Sources/justMUSIC/lib/screens/add_friend_screen.dart @@ -22,7 +22,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2UYSIpWSnX4gJhZJzaN4q.jpg?alt=media&token=39baf86a-4d19-4534-b777-1a4feca67359", [], @@ -32,7 +31,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -42,7 +40,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -52,7 +49,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -62,7 +58,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -72,7 +67,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -82,7 +76,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -92,7 +85,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -102,7 +94,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -112,7 +103,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -122,7 +112,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], @@ -132,7 +121,6 @@ class _AddFriendScreenState extends State { "&", "_pseudo", "_pseudo", - "_country", "_mail", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", [], diff --git a/Sources/justMUSIC/lib/services/AuthService.dart b/Sources/justMUSIC/lib/services/AuthService.dart index 9ca8cb0..818fddf 100644 --- a/Sources/justMUSIC/lib/services/AuthService.dart +++ b/Sources/justMUSIC/lib/services/AuthService.dart @@ -15,7 +15,6 @@ class AuthService { final user = { "mail": email, "pseudo": pseudo, - "phone_number": "", "unique_id": uniqueId, "followed": [], "nbCapsules": 0, diff --git a/Sources/justMUSIC/lib/services/PostService.dart b/Sources/justMUSIC/lib/services/PostService.dart index 4d6ad74..03f8aa4 100644 --- a/Sources/justMUSIC/lib/services/PostService.dart +++ b/Sources/justMUSIC/lib/services/PostService.dart @@ -7,7 +7,8 @@ import 'package:firebase_storage/firebase_storage.dart'; import '../main.dart'; class PostService { - createPost(String? description, String idMusic, File? image, Tuple2? location) async { + createPost(String? description, String idMusic, File? image, + Tuple2? location) async { var id = MyApp.userViewModel.userCurrent.id; final post = { "user_id": id, @@ -41,11 +42,14 @@ class PostService { deletePost() {} - Future>>> getPopularPosts({int limit = 10, int offset = 0}) async { + Future>>> getPopularPosts( + {int limit = 10, int offset = 0}) async { DateTime twentyFourHoursAgo = DateTime.now().subtract(Duration(hours: 24)); - Timestamp twentyFourHoursAgoTimestamp = Timestamp.fromDate(twentyFourHoursAgo); + Timestamp twentyFourHoursAgoTimestamp = + Timestamp.fromDate(twentyFourHoursAgo); - QuerySnapshot> response = await FirebaseFirestore.instance + QuerySnapshot> response = await FirebaseFirestore + .instance .collection("posts") .where("date", isGreaterThan: twentyFourHoursAgoTimestamp) .limit(limit) @@ -58,15 +62,33 @@ class PostService { return filteredPosts; } + Future>>> getPostsFriends( + {int limit = 10, int offset = 0}) async { + QuerySnapshot> response = await FirebaseFirestore + .instance + .collection("posts") + .where("user_id", whereIn: MyApp.userViewModel.userCurrent.followed) + .orderBy("date", descending: true) + .limit(limit) + .get(); + + return response.docs; + } + Future getAvailable(String idUser) async { DateTime today = DateTime.now(); - QuerySnapshot> response = - await FirebaseFirestore.instance.collection("posts").where("user_id", isEqualTo: idUser).get(); + QuerySnapshot> response = await FirebaseFirestore + .instance + .collection("posts") + .where("user_id", isEqualTo: idUser) + .get(); bool isTodayAvailable = response.docs.any((doc) { DateTime date = doc["date"].toDate(); // Assuming the field name is "date" - return date.day == today.day && date.month == today.month && date.year == today.year; + return date.day == today.day && + date.month == today.month && + date.year == today.year; }); return !isTodayAvailable; diff --git a/Sources/justMUSIC/lib/services/UserService.dart b/Sources/justMUSIC/lib/services/UserService.dart index d91e886..8cfb929 100644 --- a/Sources/justMUSIC/lib/services/UserService.dart +++ b/Sources/justMUSIC/lib/services/UserService.dart @@ -1,15 +1,21 @@ import 'package:cloud_firestore/cloud_firestore.dart'; -import '../model/User.dart'; import '../main.dart'; class UserService { - acceptFriend(User user, String idFriend) { - MyApp.db.collection("users").doc(user.id).update({ - "friends": FieldValue.arrayUnion([idFriend]) - }); - MyApp.db.collection("users").doc(idFriend).update({ - "friends": FieldValue.arrayUnion([user.id]) - }); + Future>>> getUsersByIdUnique( + String uniqueId) async { + QuerySnapshot> response = await FirebaseFirestore + .instance + .collection("users") + .where("unique_id", arrayContains: uniqueId) + .get(); + + var users = response.docs.where((doc) { + String id = doc["id"]; + return id != MyApp.userViewModel.userCurrent.id; + }).toList(); + + return users; } } diff --git a/Sources/justMUSIC/lib/view_model/PostViewModel.dart b/Sources/justMUSIC/lib/view_model/PostViewModel.dart index 2980018..c6d71c4 100644 --- a/Sources/justMUSIC/lib/view_model/PostViewModel.dart +++ b/Sources/justMUSIC/lib/view_model/PostViewModel.dart @@ -27,8 +27,24 @@ class PostViewModel { await _postService.createPost(description, idMusic, image, location); } - List getPostsFriends() { - throw new Error(); + Future> getPostsFriends() async { + try { + var responseData = await _postService.getPostsFriends(); + List ids = []; + var postsFutures = responseData.map((value) { + ids.add(value.data()["song_id"]); + return PostMapper.toModel(value); + }).toList(); + List musics = await MyApp.musicViewModel.getMusicsWithIds(ids); + for (int i = 0; i < _postsFriends.length; i++) { + _postsFriends[i].music = musics[i]; + } + return _postsFriends; + } catch (e) { + print(e); + _postsFriends = []; + return []; + } } List getMorePostsFriends() { diff --git a/Sources/justMUSIC/lib/view_model/UserViewModel.dart b/Sources/justMUSIC/lib/view_model/UserViewModel.dart index c98537c..e01def1 100644 --- a/Sources/justMUSIC/lib/view_model/UserViewModel.dart +++ b/Sources/justMUSIC/lib/view_model/UserViewModel.dart @@ -1,5 +1,6 @@ import 'package:firebase_auth/firebase_auth.dart' as firebase_auth; import 'package:justmusic/services/AuthService.dart'; +import 'package:justmusic/services/UserService.dart'; import '../model/User.dart'; import '../model/mapper/UserMapper.dart'; @@ -8,6 +9,7 @@ import '../main.dart'; class UserViewModel { late User _userCurrent; final AuthService _authService = AuthService(); + final UserService _userService = UserService(); User get userCurrent => _userCurrent; @@ -20,7 +22,7 @@ class UserViewModel { // Methods Future getUser(String id) async { final user = await MyApp.db.collection("users").doc(id).get(); - return UserMapper.toModel(user, null); + return UserMapper.toModel(user); } login(String pseudo, String password) async { @@ -30,7 +32,7 @@ class UserViewModel { .collection("users") .doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid) .get(); - User data = UserMapper.toModel(user, null); + User data = UserMapper.toModel(user); _userCurrent = data; } catch (e) { rethrow; @@ -48,7 +50,7 @@ class UserViewModel { .collection("users") .doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid) .get(); - User data = UserMapper.toModel(user, null); + User data = UserMapper.toModel(user); _userCurrent = data; } catch (e) { print(e); @@ -66,13 +68,26 @@ class UserViewModel { .collection("users") .doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid) .get(); - User data = UserMapper.toModel(user, null); + User data = UserMapper.toModel(user); _userCurrent = data; } catch (e) { rethrow; } } + Future> getUsersByUniqueId(String uniqueId) async { + try { + var response = await _userService.getUsersByIdUnique(uniqueId.toLowerCase()); + var users = response.map((value) { + return UserMapper.toModel(value); + }).toList(); + return users; + } catch(e) { + print(e); + return []; + } + } + logout() { _authService.signOut(); }