diff --git a/Sources/justMUSIC/lib/services/MusicService.dart b/Sources/justMUSIC/lib/services/MusicService.dart index a100258..8d4f4f6 100644 --- a/Sources/justMUSIC/lib/services/MusicService.dart +++ b/Sources/justMUSIC/lib/services/MusicService.dart @@ -1,4 +1,5 @@ import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:tuple/tuple.dart'; import '../main.dart'; @@ -46,4 +47,24 @@ class MusicService { return true; } } + + Future>> getHistoryCapsulesMonthWhitIdUser( + String idUser, int month, int year) async { + List> capsules = []; + + var querySnapshot = await FirebaseFirestore.instance + .collection('posts') + .where('user_id', isEqualTo: idUser) + .where('date', isGreaterThanOrEqualTo: DateTime(year, month)) + .where('date', isLessThan: DateTime(year, month + 1)) + .orderBy('date') + .get(); + + for (var document in querySnapshot.docs) { + capsules.add(Tuple2(document.data()['date'].toDate().day.toString(), + document.data()['idMusic'])); + } + + return capsules; + } } diff --git a/Sources/justMUSIC/lib/services/PostService.dart b/Sources/justMUSIC/lib/services/PostService.dart index 17e2645..3eb1819 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) @@ -63,7 +67,8 @@ class PostService { return Timestamp.fromDate(twentyFourHoursAgo); } - Future>>> getPostsFriends({int limit = 10, int offset = 0}) async { + Future>>> getPostsFriends( + {int limit = 10, int offset = 0}) async { var timestamp = _getTwentyFourHoursAgoTimestamp(); var response = await FirebaseFirestore.instance .collection("posts") @@ -79,12 +84,17 @@ class PostService { 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; @@ -95,11 +105,15 @@ class PostService { DateTime sevenDaysAgo = DateTime.now().subtract(Duration(days: 6)); - QuerySnapshot> response = - await FirebaseFirestore.instance.collection("posts").where("user_id", isEqualTo: id).get(); + QuerySnapshot> response = await FirebaseFirestore + .instance + .collection("posts") + .where("user_id", isEqualTo: id) + .get(); - List?> postList = - response.docs.map((DocumentSnapshot> doc) => doc.data()).toList(); + List?> postList = response.docs + .map((DocumentSnapshot> doc) => doc.data()) + .toList(); for (int i = 0; i < 7; i++) { DateTime date = sevenDaysAgo.add(Duration(days: i)); diff --git a/Sources/justMUSIC/lib/view_model/MusicViewModel.dart b/Sources/justMUSIC/lib/view_model/MusicViewModel.dart index c84c691..1e2c531 100644 --- a/Sources/justMUSIC/lib/view_model/MusicViewModel.dart +++ b/Sources/justMUSIC/lib/view_model/MusicViewModel.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:justmusic/view_model/TokenSpotify.dart'; import 'package:http/http.dart' as http; +import 'package:tuple/tuple.dart'; import '../model/Artist.dart'; import '../model/Music.dart'; import '../services/MusicService.dart'; @@ -253,4 +254,26 @@ class MusicViewModel { rethrow; } } + + Future>> getHistoryCapsulesMonthWhitIdUser( + String idUser, int month, int year) async { + try { + List> capsules = []; + var capsulesData = await _musicService.getHistoryCapsulesMonthWhitIdUser( + idUser, month, year); + + var musics = await getMusicsWithIds( + capsulesData.map((capsule) => capsule.item2).toList()); + + for (var capsule in capsulesData) { + var music = musics.firstWhere((music) => music.id == capsule.item2); + capsules.add(Tuple2(capsule.item1, music)); + } + + return capsules; + } catch (e) { + print(e); + rethrow; + } + } }