import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:physigo/exercises/exercises_validation/models/exercise.dart'; class ExercisesService { static final _db = FirebaseFirestore.instance; static final _exercises = _db.collection("Exercises"); static final _exercisesScores = _db.collection("ExercisesScores"); static Future> getExercises() async { final exercisesSnapshot = await _exercises.get(); if (exercisesSnapshot.docs.isEmpty) { return []; } final exercises = exercisesSnapshot.docs.map((e) => Exercise.fromMap(e.id, e.data())).toList(); return exercises; } static Future addScoreToExercise(Exercise exercise, int score) async { final userId = FirebaseAuth.instance.currentUser!.uid; final exerciseScoreSnapshot = await _exercisesScores.where("user", isEqualTo: userId).where("exercise", isEqualTo: exercise.id).get(); if (exerciseScoreSnapshot.docs.isEmpty) { await _exercisesScores.add({"score": score, "user": userId, "exercise": exercise.id}); } else { final exerciseScore = exerciseScoreSnapshot.docs.first; _exercisesScores.doc(exerciseScore.id).update({"score": exerciseScore.get("score") + score}); } final user = await _db.collection("profileInfo").doc(FirebaseAuth.instance.currentUser?.uid).get(); _db .collection("profileInfo") .doc(FirebaseAuth.instance.currentUser?.uid) .update({"total_points": user.get("total_points") + score}); } }