from rest_framework import serializers class StreakSummarySerializer(serializers.Serializer): current = serializers.IntegerField() longest = serializers.IntegerField() class UserSummaryResponseSerializer(serializers.Serializer): userId = serializers.CharField() name = serializers.CharField() avatar = serializers.CharField() gradeId = serializers.IntegerField(allow_null=True) xp = serializers.IntegerField() coins = serializers.IntegerField() streak = StreakSummarySerializer() subscription = serializers.CharField(allow_null=True) class StreakCalendarResponseSerializer(serializers.Serializer): currentStreak = serializers.IntegerField() longestStreak = serializers.IntegerField() activeDays = serializers.ListField(child=serializers.DateField()) class LeaderboardEntrySerializer(serializers.Serializer): rank = serializers.IntegerField() userId = serializers.CharField() name = serializers.CharField() xpInPeriod = serializers.IntegerField() class LeaderboardResponseSerializer(serializers.Serializer): period = serializers.ChoiceField(choices=['weekly', 'all_time']) entries = LeaderboardEntrySerializer(many=True) class UserHeartsResponseSerializer(serializers.Serializer): currentHearts = serializers.IntegerField() maxHearts = serializers.IntegerField() nextRefillAt = serializers.DateTimeField(allow_null=True)