Add getPostsFriends and getUsersByUniqueId

pull/32/head
Emre KARTAL 2 years ago
parent 10b947cb4e
commit 8e5e386d79

@ -2,7 +2,6 @@ class User {
final String _id; final String _id;
String _pseudo; String _pseudo;
String _uniquePseudo; String _uniquePseudo;
String _country;
String _mail; String _mail;
String _pp; String _pp;
List<String> _followers; List<String> _followers;
@ -10,7 +9,7 @@ class User {
List<String> _followed; List<String> _followed;
// Constructor // 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); this._pp, this._followers, this._capsules, this._followed);
//Getters and setters //Getters and setters
@ -28,12 +27,6 @@ class User {
_uniquePseudo = value; _uniquePseudo = value;
} }
String get country => _country;
set country(String value) {
_country = value;
}
String get mail => _mail; String get mail => _mail;
set mail(String value) { set mail(String value) {

@ -2,14 +2,12 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:justmusic/model/User.dart'; import 'package:justmusic/model/User.dart';
class UserMapper { class UserMapper {
static User toModel(DocumentSnapshot<Map<String, dynamic>> snapshot, static User toModel(DocumentSnapshot<Map<String, dynamic>> snapshot) {
SnapshotOptions? options) {
final data = snapshot.data(); final data = snapshot.data();
return User( return User(
snapshot.id, snapshot.id,
data?["pseudo"], data?["pseudo"],
data?["unique_id"], data?["unique_id"],
data?["country"] ?? "",
data?["mail"], data?["mail"],
data?["picture"], data?["picture"],
List<String>.from(data?["followers"] as List), List<String>.from(data?["followers"] as List),

@ -22,7 +22,6 @@ class _AddFriendScreenState extends State<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2UYSIpWSnX4gJhZJzaN4q.jpg?alt=media&token=39baf86a-4d19-4534-b777-1a4feca67359", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "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<AddFriendScreen> {
"&", "&",
"_pseudo", "_pseudo",
"_pseudo", "_pseudo",
"_country",
"_mail", "_mail",
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/RUiGpZ8AzCQPqiVJKwuQeIqiC4B2bafPGRGLh2La72LkmQst.jpg?alt=media&token=ac1916f0-e08d-43bd-977a-2c2d94182609",
[], [],

@ -15,7 +15,6 @@ class AuthService {
final user = <String, dynamic>{ final user = <String, dynamic>{
"mail": email, "mail": email,
"pseudo": pseudo, "pseudo": pseudo,
"phone_number": "",
"unique_id": uniqueId, "unique_id": uniqueId,
"followed": [], "followed": [],
"nbCapsules": 0, "nbCapsules": 0,

@ -7,7 +7,8 @@ import 'package:firebase_storage/firebase_storage.dart';
import '../main.dart'; import '../main.dart';
class PostService { class PostService {
createPost(String? description, String idMusic, File? image, Tuple2<String, String>? location) async { createPost(String? description, String idMusic, File? image,
Tuple2<String, String>? location) async {
var id = MyApp.userViewModel.userCurrent.id; var id = MyApp.userViewModel.userCurrent.id;
final post = <String, dynamic>{ final post = <String, dynamic>{
"user_id": id, "user_id": id,
@ -41,11 +42,14 @@ class PostService {
deletePost() {} deletePost() {}
Future<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getPopularPosts({int limit = 10, int offset = 0}) async { Future<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getPopularPosts(
{int limit = 10, int offset = 0}) async {
DateTime twentyFourHoursAgo = DateTime.now().subtract(Duration(hours: 24)); DateTime twentyFourHoursAgo = DateTime.now().subtract(Duration(hours: 24));
Timestamp twentyFourHoursAgoTimestamp = Timestamp.fromDate(twentyFourHoursAgo); Timestamp twentyFourHoursAgoTimestamp =
Timestamp.fromDate(twentyFourHoursAgo);
QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore.instance QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore
.instance
.collection("posts") .collection("posts")
.where("date", isGreaterThan: twentyFourHoursAgoTimestamp) .where("date", isGreaterThan: twentyFourHoursAgoTimestamp)
.limit(limit) .limit(limit)
@ -58,15 +62,33 @@ class PostService {
return filteredPosts; return filteredPosts;
} }
Future<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getPostsFriends(
{int limit = 10, int offset = 0}) async {
QuerySnapshot<Map<String, dynamic>> 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<bool> getAvailable(String idUser) async { Future<bool> getAvailable(String idUser) async {
DateTime today = DateTime.now(); DateTime today = DateTime.now();
QuerySnapshot<Map<String, dynamic>> response = QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore
await FirebaseFirestore.instance.collection("posts").where("user_id", isEqualTo: idUser).get(); .instance
.collection("posts")
.where("user_id", isEqualTo: idUser)
.get();
bool isTodayAvailable = response.docs.any((doc) { bool isTodayAvailable = response.docs.any((doc) {
DateTime date = doc["date"].toDate(); // Assuming the field name is "date" 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; return !isTodayAvailable;

@ -1,15 +1,21 @@
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import '../model/User.dart';
import '../main.dart'; import '../main.dart';
class UserService { class UserService {
acceptFriend(User user, String idFriend) { Future<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getUsersByIdUnique(
MyApp.db.collection("users").doc(user.id).update({ String uniqueId) async {
"friends": FieldValue.arrayUnion([idFriend]) QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore
}); .instance
MyApp.db.collection("users").doc(idFriend).update({ .collection("users")
"friends": FieldValue.arrayUnion([user.id]) .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;
} }
} }

@ -27,8 +27,24 @@ class PostViewModel {
await _postService.createPost(description, idMusic, image, location); await _postService.createPost(description, idMusic, image, location);
} }
List<Post> getPostsFriends() { Future<List<Post>> getPostsFriends() async {
throw new Error(); try {
var responseData = await _postService.getPostsFriends();
List<String> ids = [];
var postsFutures = responseData.map((value) {
ids.add(value.data()["song_id"]);
return PostMapper.toModel(value);
}).toList();
List<Music> 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<Post> getMorePostsFriends() { List<Post> getMorePostsFriends() {

@ -1,5 +1,6 @@
import 'package:firebase_auth/firebase_auth.dart' as firebase_auth; import 'package:firebase_auth/firebase_auth.dart' as firebase_auth;
import 'package:justmusic/services/AuthService.dart'; import 'package:justmusic/services/AuthService.dart';
import 'package:justmusic/services/UserService.dart';
import '../model/User.dart'; import '../model/User.dart';
import '../model/mapper/UserMapper.dart'; import '../model/mapper/UserMapper.dart';
@ -8,6 +9,7 @@ import '../main.dart';
class UserViewModel { class UserViewModel {
late User _userCurrent; late User _userCurrent;
final AuthService _authService = AuthService(); final AuthService _authService = AuthService();
final UserService _userService = UserService();
User get userCurrent => _userCurrent; User get userCurrent => _userCurrent;
@ -20,7 +22,7 @@ class UserViewModel {
// Methods // Methods
Future<User?> getUser(String id) async { Future<User?> getUser(String id) async {
final user = await MyApp.db.collection("users").doc(id).get(); 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 { login(String pseudo, String password) async {
@ -30,7 +32,7 @@ class UserViewModel {
.collection("users") .collection("users")
.doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid) .doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid)
.get(); .get();
User data = UserMapper.toModel(user, null); User data = UserMapper.toModel(user);
_userCurrent = data; _userCurrent = data;
} catch (e) { } catch (e) {
rethrow; rethrow;
@ -48,7 +50,7 @@ class UserViewModel {
.collection("users") .collection("users")
.doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid) .doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid)
.get(); .get();
User data = UserMapper.toModel(user, null); User data = UserMapper.toModel(user);
_userCurrent = data; _userCurrent = data;
} catch (e) { } catch (e) {
print(e); print(e);
@ -66,13 +68,26 @@ class UserViewModel {
.collection("users") .collection("users")
.doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid) .doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid)
.get(); .get();
User data = UserMapper.toModel(user, null); User data = UserMapper.toModel(user);
_userCurrent = data; _userCurrent = data;
} catch (e) { } catch (e) {
rethrow; rethrow;
} }
} }
Future<List<User>> 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() { logout() {
_authService.signOut(); _authService.signOut();
} }

Loading…
Cancel
Save