from rest_framework import serializers from .models import Choice, Grade, Lesson, Question # ---- Grades ---- class GradeSerializer(serializers.ModelSerializer): class Meta: model = Grade fields = ['id', 'title', 'icon', 'color'] class GradesListResponseSerializer(serializers.Serializer): grades = GradeSerializer(many=True) # ---- Home (skill map + stats) ---- class NodeStatusSerializer(serializers.Serializer): id = serializers.CharField() title = serializers.CharField() status = serializers.ChoiceField(choices=['locked', 'unlocked', 'completed']) class UnitWithNodesSerializer(serializers.Serializer): id = serializers.CharField() title = serializers.CharField() nodes = NodeStatusSerializer(many=True) class StatsSerializer(serializers.Serializer): progressPercent = serializers.FloatField() xp = serializers.IntegerField() coins = serializers.IntegerField() class HomeResponseSerializer(serializers.Serializer): units = UnitWithNodesSerializer(many=True) stats = StatsSerializer() # ---- Lesson intro ---- class LessonIntroResponseSerializer(serializers.Serializer): lessonId = serializers.CharField() title = serializers.CharField() introText = serializers.CharField() mascotAnimation = serializers.CharField() # ---- Lesson questions ---- class ChoiceOptionSerializer(serializers.Serializer): id = serializers.CharField() value = serializers.CharField() class QuestionSerializer(serializers.Serializer): id = serializers.CharField() type = serializers.CharField() prompt = serializers.CharField() options = ChoiceOptionSerializer(many=True) class LessonQuestionsResponseSerializer(serializers.Serializer): questions = QuestionSerializer(many=True) # ---- Answer submission ---- class AnswerRequestSerializer(serializers.Serializer): selectedOptionId = serializers.IntegerField() class AnswerResponseSerializer(serializers.Serializer): correct = serializers.BooleanField() correctOptionId = serializers.CharField() xpEarned = serializers.IntegerField() heartsRemaining = serializers.IntegerField() # ---- Lesson completion ---- class LessonCompleteRequestSerializer(serializers.Serializer): correctCount = serializers.IntegerField() totalQuestions = serializers.IntegerField() class LessonCompleteResponseSerializer(serializers.Serializer): stars = serializers.IntegerField() xpEarned = serializers.IntegerField() coinsEarned = serializers.IntegerField() stats = StatsSerializer()