from django.db import models from django.contrib.auth.models import AbstractUser import uuid import tournaments class Club(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=50) acronym = models.CharField(max_length=10) phone = models.CharField(max_length=15, null=True, blank=True) code = models.CharField(max_length=10, null=True, blank=True) federal_club_data = models.JSONField(null=True, blank=True) address = models.CharField(max_length=200, null=True, blank=True) city = models.CharField(max_length=100, null=True, blank=True) zip_code = models.CharField(max_length=10, null=True, blank=True) latitude = models.FloatField(null=True, blank=True) longitude = models.FloatField(null=True, blank=True) def __str__(self): return self.name class CustomUser(AbstractUser): pass id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) umpire_code = models.CharField(max_length=50, blank=True, null=True) clubs = models.ManyToManyField(Club) phone = models.CharField(max_length=15, null=True, blank=True) first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) licence_id = models.CharField(max_length=10, null=True, blank=True) def __str__(self): return self.username class Event(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) club = models.ForeignKey(Club, on_delete=models.CASCADE) date = models.DateField() name = models.CharField(max_length=200, null=True, blank=True) federal_tournament_data = models.JSONField(null=True, blank=True) court_count = models.IntegerField(null=True, blank=True) tenup_id = models.IntegerField(null=True, blank=True) group_stage_format = models.IntegerField(null=True, blank=True) round_format = models.IntegerField(null=True, blank=True) loser_round_format = models.IntegerField(null=True, blank=True) def __str__(self): return self.name class Tournament(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) event = models.ForeignKey(Event, blank=True, null=True, on_delete=models.CASCADE) user = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.CASCADE) name = models.CharField(max_length=200, null=True, blank=True) start_date = models.DateField() end_date = models.DateField(null=True, blank=True) creation_date = models.DateField() is_private = models.BooleanField() format = models.IntegerField(null=True, blank=True) group_stage_format = models.IntegerField(null=True, blank=True) round_format = models.IntegerField(null=True, blank=True) loser_round_format = models.IntegerField(null=True, blank=True) bracket_sort_mode = models.IntegerField(default=0) group_stage_count = models.IntegerField(default=0) rank_source_date = models.DateField(null=True, blank=True) custom_name = models.CharField(max_length=100, null=True, blank=True) day_duration = models.IntegerField(default=0) team_count = models.IntegerField(default=0) team_sorting = models.IntegerField(default=0) federal_category = models.IntegerField(default=0) federal_level_category = models.IntegerField(default=0) federal_age_category = models.IntegerField(default=0) group_stage_court_count = models.IntegerField(null=True, blank=True) seed_count = models.IntegerField(default=0) closed_registration_date = models.DateField(null=True, blank=True) additional_qualified = models.IntegerField(default=0) court_count = models.IntegerField(null=True, blank=True) prioritize_club_members = models.BooleanField() qualified_per_group_stage = models.IntegerField(default=0) teams_per_group_stage = models.IntegerField(default=0) #estimated_end_date = models.DateField(null=True, blank=True) def __str__(self): return self.name class Round(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) tournament = models.ForeignKey(Club, on_delete=models.CASCADE) index = models.IntegerField(null=True, blank=True) loser = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE) format = models.IntegerField(null=True, blank=True) def __str__(self): return self.index class GroupStage(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) tournament = models.ForeignKey(Club, on_delete=models.CASCADE) index = models.IntegerField(null=True, blank=True) format = models.IntegerField(null=True, blank=True) def __str__(self): return self.index class Match(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) round = models.ForeignKey(Round, null=True, blank=True, on_delete=models.CASCADE) group_stage = models.ForeignKey(GroupStage, null=True, blank=True, on_delete=models.CASCADE) index = models.IntegerField(null=True, blank=True) format = models.IntegerField(null=True, blank=True) court = models.IntegerField(null=True, blank=True) start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) serving_team_id = models.UUIDField(null=True, blank=True) winning_team_id = models.UUIDField(null=True, blank=True) losing_team_id = models.UUIDField(null=True, blank=True) class TeamState(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) match = models.ForeignKey(Match, on_delete=models.CASCADE) score = models.CharField(max_length=200) walk_out = models.IntegerField(null=True, blank=True) #id, int of the walked_out team lucky_loser = models.BooleanField() class TeamRegistration(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE) group_stage = models.ForeignKey(GroupStage, null=True, blank=True, on_delete=models.SET_NULL) registration_date = models.DateField(null=True, blank=True) call_date = models.DateField(null=True, blank=True) initial_position = models.IntegerField(null=True, blank=True) group_stage_position = models.IntegerField(null=True, blank=True) logo = models.CharField(max_length=200, null=True, blank=True) class PlayerRegistration(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) team_registration = models.ForeignKey(TeamRegistration, on_delete=models.CASCADE) team_state = models.ManyToManyField(TeamState) first_name = models.CharField(max_length=200) last_name = models.CharField(max_length=200) licence_id = models.CharField(max_length=200) rank = models.IntegerField(null=True, blank=True) has_paid = models.BooleanField() def __str__(self): return self.first_name # player = models.ForeignKey(Club, on_delete=models.CASCADE) # class Set(models.Model): # class Game(models.Model): # set = models.ForeignKey(Set, on_delete=models.CASCADE) # format = models.IntegerField() # class Point(models.Model): # game = models.ForeignKey(Game, on_delete=models.CASCADE) # action = models.IntegerField() # date = models.DateField() # team_id = models.IntegerField()