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;
String _pseudo;
String _uniquePseudo;
String _country;
String _mail;
String _pp;
List<String> _followers;
@ -10,7 +9,7 @@ class User {
List<String> _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) {

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

@ -22,7 +22,6 @@ class _AddFriendScreenState extends State<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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<AddFriendScreen> {
"&",
"_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",
[],

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

@ -7,7 +7,8 @@ import 'package:firebase_storage/firebase_storage.dart';
import '../main.dart';
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;
final post = <String, dynamic>{
"user_id": id,
@ -41,11 +42,14 @@ class PostService {
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));
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")
.where("date", isGreaterThan: twentyFourHoursAgoTimestamp)
.limit(limit)
@ -58,15 +62,33 @@ class PostService {
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 {
DateTime today = DateTime.now();
QuerySnapshot<Map<String, dynamic>> response =
await FirebaseFirestore.instance.collection("posts").where("user_id", isEqualTo: idUser).get();
QuerySnapshot<Map<String, dynamic>> 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;

@ -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<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getUsersByIdUnique(
String uniqueId) async {
QuerySnapshot<Map<String, dynamic>> 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;
}
}

@ -27,8 +27,24 @@ class PostViewModel {
await _postService.createPost(description, idMusic, image, location);
}
List<Post> getPostsFriends() {
throw new Error();
Future<List<Post>> getPostsFriends() async {
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() {

@ -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<User?> 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<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() {
_authService.signOut();
}

Loading…
Cancel
Save