init: tournament
This commit is contained in:
0
tournament/__init__.py
Normal file
0
tournament/__init__.py
Normal file
3
tournament/admin.py
Normal file
3
tournament/admin.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
6
tournament/apps.py
Normal file
6
tournament/apps.py
Normal file
@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class TournamentConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'tournament'
|
47
tournament/models.py
Normal file
47
tournament/models.py
Normal file
@ -0,0 +1,47 @@
|
||||
from django.db import models
|
||||
|
||||
from games.models import GameModel
|
||||
|
||||
# Create your models here.tu
|
||||
class TournamentModel(models.Model):
|
||||
|
||||
name = models.CharField()
|
||||
nb_players = models.IntegerField()
|
||||
nb_players_by_game = models.IntegerField()
|
||||
level = models.IntegerField()
|
||||
started = models.BooleanField(default=False)
|
||||
finished = models.BooleanField(default=False)
|
||||
|
||||
def create(self, nb_players: int, nb_players_by_game: int, name: str = ""):
|
||||
self.level = 1
|
||||
number: int = nb_players
|
||||
while (number != nb_players_by_game):
|
||||
number = number // 2 + (number % 2)
|
||||
self.level += 1
|
||||
self.nb_players = nb_players
|
||||
self.nb_players_by_game = nb_players_by_game
|
||||
self.name = name
|
||||
return self.save()
|
||||
|
||||
def create_game(self, users_id):
|
||||
game_id = GameModel.create(users_id=users_id)
|
||||
TournamentGamesModel(game_id=game_id, tournament_id=self.pk).save()
|
||||
return game_id
|
||||
|
||||
def get_games_id_by_level(self, level):
|
||||
return list(TournamentGamesModel.objects.filter(tournament_id=self.pk, tournament_level=level))
|
||||
|
||||
def get_games_id(self):
|
||||
return list(TournamentGamesModel.objects.filter(tournament_id=self.pk))
|
||||
|
||||
def get_players_id(self):
|
||||
lst: [int] = []
|
||||
for game_id in self.get_games_id():
|
||||
lst.append(GameMembersModel.objects.filter(game_id=game_id))
|
||||
return lst
|
||||
|
||||
class TournamentGamesModel(models.Model):
|
||||
|
||||
tournament_id = models.IntegerField()
|
||||
tournament_level = models.IntegerField()
|
||||
game_id = models.IntegerField()
|
3
tournament/tests.py
Normal file
3
tournament/tests.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
10
tournament/urls.py
Normal file
10
tournament/urls.py
Normal file
@ -0,0 +1,10 @@
|
||||
from django.urls import path
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
|
||||
from .views import TournamentsView, TournamentView
|
||||
|
||||
urlpatterns = [
|
||||
path("<int:pk>", name="tournament_page"),
|
||||
path("", TournamentsView.as_view(), name="tournaments"),
|
||||
]
|
61
tournament/views.py
Normal file
61
tournament/views.py
Normal file
@ -0,0 +1,61 @@
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import permissions, status
|
||||
from rest_framework.authentication import SessionAuthentication
|
||||
|
||||
from django.http import HttpRequest
|
||||
from django.contrib.auth import login
|
||||
|
||||
from matchmaking.models import in_matchmaking
|
||||
from .models import TournamentModel
|
||||
|
||||
# Create your views here.
|
||||
class TournamentsView(APIView):
|
||||
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
authentication_classes = (SessionAuthentication,)
|
||||
|
||||
def post(self, request: HttpRequest):
|
||||
|
||||
data: dict = request.data
|
||||
|
||||
nb_players_by_game = data.get("nb_players_by_game")
|
||||
if (nb_players_by_game is None):
|
||||
return Response("nb_player_by_game is required.", status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
nb_players = data.get("nb_players")
|
||||
if (nb_players is None):
|
||||
return Response("nb_players is required.", status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
tournament_id: int = TournamentModel.create(users_id=users_id, nb_players=nb_players)
|
||||
|
||||
return Response({"tournament_id": tournament_id}, status=status.HTTP_201_CREATED)
|
||||
|
||||
class TournamentView(APIView):
|
||||
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
authentication_classes = (SessionAuthentication,)
|
||||
|
||||
def get(self, request: HttpRequest, pk):
|
||||
|
||||
if (not TournamentModel.objects.filter(pk=pk).exists()):
|
||||
return Response({"detail": "Tournament not found."}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
tournament = TournamentModel.objects.get(pk=pk)
|
||||
|
||||
levels: [[int]] = []
|
||||
level: [int] = tournament.get_games_id_by_level
|
||||
while level != []:
|
||||
levels.append(level)
|
||||
level: [int] = tournament.get_games_id_by_level
|
||||
|
||||
data = {
|
||||
"name": tournament.name,
|
||||
"finished": tournament.finished,
|
||||
"started": tournament.finished,
|
||||
"nb_players": tournament.nb_players,
|
||||
"nb_players_by_game": tournament.nb_players_by_game,
|
||||
"levels": levels
|
||||
}
|
||||
|
||||
return Response(data, status=status.HTTP_200_OK)
|
Reference in New Issue
Block a user