from rest_framework.response import Response from rest_framework.views import APIView from .models import UserAbility, UserPet class ProgressionProfileView(APIView): def get(self, request): pet, _ = UserPet.objects.get_or_create(user=request.user) existing = {ability.dimension: ability for ability in request.user.abilities.all()} abilities = [] for dimension, label in UserAbility.Dimension.choices: ability = existing.get(dimension) if ability is None: ability = UserAbility.objects.create(user=request.user, dimension=dimension) abilities.append( { "dimension": dimension, "label": label, "level": ability.level, "fragments": ability.fragments, } ) return Response( { "pet": { "name": pet.name, "level": pet.level, "experience": pet.experience, "appearance": pet.appearance, }, "abilities": abilities, "cards": [ { "slug": item.card.slug, "name": item.card.name, "mathematician": item.card.mathematician, "image": item.card.image, "acquired_at": item.acquired_at, } for item in request.user.cards.select_related("card") ], "recent_games": [ { "kind": attempt.kind, "label": attempt.get_kind_display(), "difficulty": attempt.get_difficulty_display(), "status": attempt.status, "score": attempt.score, "duration_ms": attempt.duration_ms, "started_at": attempt.started_at, } for attempt in request.user.math_game_attempts.all()[:10] ], } )