From 31604613520be83d6cf734441359d02545632c4f Mon Sep 17 00:00:00 2001 From: AleksanderWK <aleksawk@stud.ntnu.no> Date: Sat, 26 Mar 2022 13:06:50 +0100 Subject: [PATCH 1/2] Refactor WorkoutSerializer class --- backend/secfit/workouts/serializers.py | 40 +++++++++++++++----------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/backend/secfit/workouts/serializers.py b/backend/secfit/workouts/serializers.py index 33c5c03..0d56703 100644 --- a/backend/secfit/workouts/serializers.py +++ b/backend/secfit/workouts/serializers.py @@ -150,6 +150,26 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer): ) exercise_instance.save() + self.handle_exercise_instances(instance, exercise_instances_data, exercise_instances) + + # Handle WorkoutFiles + self.handle_workout_files(instance, validated_data) + + return instance + + def get_owner_username(self, obj): + """Returns the owning user's username + + Args: + obj (Workout): Current Workout + + Returns: + str: Username of owner + """ + return obj.owner.username + + # Helper method for updating exercise instances in workouts + def handle_exercise_instances(self, instance, exercise_instances_data, exercise_instances): # If new exercise instances have been added to the workout, then create them if len(exercise_instances_data) > len(exercise_instances.all()): for i in range(len(exercise_instances.all()), len(exercise_instances_data)): @@ -161,9 +181,9 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer): elif len(exercise_instances_data) < len(exercise_instances.all()): for i in range(len(exercise_instances_data), len(exercise_instances.all())): exercise_instances.all()[i].delete() - - # Handle WorkoutFiles - + + # Helper method for updating workout files + def handle_workout_files(self, instance, validated_data): if "files" in validated_data: files_data = validated_data.pop("files") files = instance.files @@ -184,20 +204,6 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer): for i in range(len(files_data), len(files.all())): files.all()[i].delete() - return instance - - def get_owner_username(self, obj): - """Returns the owning user's username - - Args: - obj (Workout): Current Workout - - Returns: - str: Username of owner - """ - return obj.owner.username - - class ExerciseSerializer(serializers.HyperlinkedModelSerializer): """Serializer for an Exercise. Hyperlinks are used for relationships by default. -- GitLab From 23c2c56a32dcf567f73de64d1c81640231927e8e Mon Sep 17 00:00:00 2001 From: AleksanderWK <aleksawk@stud.ntnu.no> Date: Sat, 26 Mar 2022 13:46:45 +0100 Subject: [PATCH 2/2] Add greater method extraction --- backend/secfit/workouts/serializers.py | 34 ++++++++++++-------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/backend/secfit/workouts/serializers.py b/backend/secfit/workouts/serializers.py index 0d56703..1390bc4 100644 --- a/backend/secfit/workouts/serializers.py +++ b/backend/secfit/workouts/serializers.py @@ -132,24 +132,6 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer): instance.save() # Handle ExerciseInstances - - # This updates existing exercise instances without adding or deleting object. - # zip() will yield n 2-tuples, where n is - # min(len(exercise_instance), len(exercise_instance_data)) - for exercise_instance, exercise_instance_data in zip( - exercise_instances.all(), exercise_instances_data - ): - exercise_instance.exercise = exercise_instance_data.get( - "exercise", exercise_instance.exercise - ) - exercise_instance.number = exercise_instance_data.get( - "number", exercise_instance.number - ) - exercise_instance.sets = exercise_instance_data.get( - "sets", exercise_instance.sets - ) - exercise_instance.save() - self.handle_exercise_instances(instance, exercise_instances_data, exercise_instances) # Handle WorkoutFiles @@ -170,6 +152,22 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer): # Helper method for updating exercise instances in workouts def handle_exercise_instances(self, instance, exercise_instances_data, exercise_instances): + # This updates existing exercise instances without adding or deleting object. + # zip() will yield n 2-tuples, where n is + # min(len(exercise_instance), len(exercise_instance_data)) + for exercise_instance, exercise_instance_data in zip( + exercise_instances.all(), exercise_instances_data + ): + exercise_instance.exercise = exercise_instance_data.get( + "exercise", exercise_instance.exercise + ) + exercise_instance.number = exercise_instance_data.get( + "number", exercise_instance.number + ) + exercise_instance.sets = exercise_instance_data.get( + "sets", exercise_instance.sets + ) + exercise_instance.save() # If new exercise instances have been added to the workout, then create them if len(exercise_instances_data) > len(exercise_instances.all()): for i in range(len(exercise_instances.all()), len(exercise_instances_data)): -- GitLab