tournament: fix: serializer
This commit is contained in:
parent
8c22dd28fb
commit
55d29d5763
@ -65,7 +65,7 @@ class TournamentModel(models.Model):
|
|||||||
return game
|
return game
|
||||||
|
|
||||||
def get_games(self) -> set[GameModel]:
|
def get_games(self) -> set[GameModel]:
|
||||||
return {games for games in self.get_games_by_round(i for i in range(1, self.round))}
|
return [{games for games in self.get_games_by_round(i)} for i in range(1, self.round)]
|
||||||
|
|
||||||
def get_games_by_round(self, round: int) -> set[GameModel]:
|
def get_games_by_round(self, round: int) -> set[GameModel]:
|
||||||
return {tournament_game for tournament_game in TournamentGameModel.objects.filter(tournament=self, round=round)}
|
return {tournament_game for tournament_game in TournamentGameModel.objects.filter(tournament=self, round=round)}
|
||||||
|
@ -5,7 +5,7 @@ from .models import TournamentModel, TournamentGameModel
|
|||||||
from profiles.serializers import ProfileSerializer
|
from profiles.serializers import ProfileSerializer
|
||||||
from games.serializers import GameSerializer
|
from games.serializers import GameSerializer
|
||||||
|
|
||||||
nb_participants = [2 ** i for i in range(2, 6)]
|
nb_participants = [2 ** i for i in range(1, 6)]
|
||||||
|
|
||||||
class TournamentSerializer(serializers.ModelSerializer):
|
class TournamentSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ class TournamentSerializer(serializers.ModelSerializer):
|
|||||||
return ProfileSerializer(instance.get_participants(), many=True).data
|
return ProfileSerializer(instance.get_participants(), many=True).data
|
||||||
|
|
||||||
def get_games(self, instance: TournamentModel):
|
def get_games(self, instance: TournamentModel):
|
||||||
return GameSerializer(instance.get_games(), many=True).data
|
return [GameSerializer(games, many=True).data for games in instance.get_games()]
|
||||||
|
|
||||||
def get_state(self, instance: TournamentModel):
|
def get_state(self, instance: TournamentModel):
|
||||||
return ["waiting", "started", "finished"][instance.started + instance.finished]
|
return ["waiting", "started", "finished"][instance.started + instance.finished]
|
||||||
|
@ -10,6 +10,8 @@ from django.db.models import QuerySet
|
|||||||
from .models import TournamentModel
|
from .models import TournamentModel
|
||||||
from .serializers import TournamentSerializer
|
from .serializers import TournamentSerializer
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class TournamentViewSet(viewsets.ModelViewSet):
|
class TournamentViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
@ -19,7 +21,7 @@ class TournamentViewSet(viewsets.ModelViewSet):
|
|||||||
authentication_classes = (SessionAuthentication,)
|
authentication_classes = (SessionAuthentication,)
|
||||||
|
|
||||||
def perform_create(self, serializer: TournamentSerializer):
|
def perform_create(self, serializer: TournamentSerializer):
|
||||||
tournament = serializer.save(round=1)
|
tournament = serializer.save(round=math.log2(serializer.validated_data['nb_participants']) + 1)
|
||||||
|
|
||||||
return Response(self.serializer_class(tournament).data, status=status.HTTP_201_CREATED)
|
return Response(self.serializer_class(tournament).data, status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user