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) # همه‌ی قلب‌ها کی یک‌جا پر می‌شوند (۲۴ ساعت بعد از اولین قلبِ ازدست‌رفته). fullRefillAt = serializers.DateTimeField(allow_null=True) isUnlimited = serializers.BooleanField() class CharacterSerializer(serializers.Serializer): characterId = serializers.CharField() slug = serializers.CharField() name = serializers.CharField() icon = serializers.CharField() unlockXp = serializers.IntegerField() unlocked = serializers.BooleanField() selected = serializers.BooleanField() class CharacterListResponseSerializer(serializers.Serializer): characters = CharacterSerializer(many=True) class SelectCharacterRequestSerializer(serializers.Serializer): characterId = serializers.CharField() class SelectCharacterResponseSerializer(serializers.Serializer): characterId = serializers.CharField() selected = serializers.BooleanField()