challenge_service.dart 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. import 'package:cloud_firestore/cloud_firestore.dart';
  2. import '../models/challenge.dart';
  3. class ChallengeService {
  4. static final _db = FirebaseFirestore.instance;
  5. static final _dailyChallenges = _db.collection("DailyChallenges");
  6. static final _weeklyChallenges = _db.collection("WeeklyChallenges");
  7. static Future<Challenge> getDailyChallenge() async {
  8. final challenges = await _dailyChallenges.orderBy("date", descending: true).limit(1).get();
  9. final challenge = challenges.docs.first.data();
  10. challenge["list_exercises"] = await _getExercisesFromChallenge(challenge);
  11. return Challenge.fromMap(challenge);
  12. }
  13. static Future<Challenge> getWeeklyChallenge() async {
  14. final challenges = await _weeklyChallenges.orderBy("date", descending: true).limit(1).get();
  15. final challenge = challenges.docs.first.data();
  16. challenge["list_exercises"] = await _getExercisesFromChallenge(challenge);
  17. return Challenge.fromMap(challenge);
  18. }
  19. static Future<List<Map<String, dynamic>>> _getExercisesFromChallenge(Map<String, dynamic> challenge) async {
  20. return await Future.wait(
  21. List<DocumentReference<Map<String, dynamic>>>.from(challenge["list_exercises"]).map((exerciseRef) async {
  22. final exercise = await exerciseRef.get();
  23. return {"id": exercise.id,...exercise.data()!};
  24. }));
  25. }
  26. }