from rest_framework import serializers from .models import LeistungstestTemplate, LeistungstestTemplateExercise, LeistungstestResult, LeistungstestResultItem class LeistungstestTemplateExerciseSerializer(serializers.ModelSerializer): exercise_name = serializers.CharField(source='exercise.name', read_only=True) class Meta: model = LeistungstestTemplateExercise fields = ['id', 'exercise', 'exercise_name', 'target_reps', 'order'] class LeistungstestTemplateSerializer(serializers.ModelSerializer): exercises = LeistungstestTemplateExerciseSerializer(many=True, read_only=True) usage_count = serializers.IntegerField(read_only=True) class Meta: model = LeistungstestTemplate fields = ['id', 'name', 'exercises', 'usage_count', 'created_at'] class LeistungstestResultItemSerializer(serializers.ModelSerializer): exercise_name = serializers.CharField(source='exercise.name', read_only=True) class Meta: model = LeistungstestResultItem fields = ['id', 'exercise', 'exercise_name', 'target_reps', 'actual_reps', 'elapsed_seconds', 'order'] class LeistungstestResultSerializer(serializers.ModelSerializer): items = LeistungstestResultItemSerializer(many=True, read_only=True) template_name = serializers.CharField(source='template.name', read_only=True) wrestler_name = serializers.CharField(source='wrestler.__str__', read_only=True) score_percent = serializers.FloatField(read_only=True) total_time_minutes = serializers.SerializerMethodField() class Meta: model = LeistungstestResult fields = ['id', 'template', 'template_name', 'wrestler', 'wrestler_name', 'total_time_minutes', 'total_time_seconds', 'rating', 'notes', 'completed_at', 'score_percent', 'items', 'created_at'] read_only_fields = ['total_time_minutes'] def get_total_time_minutes(self, obj): if obj.total_time_seconds is None: return None return obj.total_time_seconds // 60 def validate_total_time_seconds(self, value): if value is not None and value < 0: raise serializers.ValidationError("Zeit muss positiv sein.") return value