exercises_service.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import 'package:cloud_firestore/cloud_firestore.dart';
  2. import 'package:firebase_auth/firebase_auth.dart';
  3. import 'package:physigo/exercises/exercises_validation/models/exercise.dart';
  4. class ExercisesService {
  5. static final _db = FirebaseFirestore.instance;
  6. static final _exercises = _db.collection("Exercises");
  7. static final _exercisesScores = _db.collection("ExercisesScores");
  8. static Future<List<Exercise>> getExercises() async {
  9. final exercisesSnapshot = await _exercises.get();
  10. if (exercisesSnapshot.docs.isEmpty) {
  11. return [];
  12. }
  13. final exercises = exercisesSnapshot.docs.map((e) => Exercise.fromMap(e.id, e.data())).toList();
  14. return exercises;
  15. }
  16. static Future<void> addScoreToExercise(Exercise exercise, int score) async {
  17. final userId = FirebaseAuth.instance.currentUser!.uid;
  18. final exerciseScoreSnapshot =
  19. await _exercisesScores.where("user", isEqualTo: userId).where("exercise", isEqualTo: exercise.id).get();
  20. if (exerciseScoreSnapshot.docs.isEmpty) {
  21. await _exercisesScores.add({"score": score, "user": userId, "exercise": exercise.id});
  22. } else {
  23. final exerciseScore = exerciseScoreSnapshot.docs.first;
  24. _exercisesScores.doc(exerciseScore.id).update({"score": exerciseScore.get("score") + score});
  25. }
  26. final user = await _db.collection("profileInfo").doc(FirebaseAuth.instance.currentUser?.uid).get();
  27. _db
  28. .collection("profileInfo")
  29. .doc(FirebaseAuth.instance.currentUser?.uid)
  30. .update({"total_points": user.get("total_points") + score});
  31. }
  32. }