diff --git a/api/serializers.py b/api/serializers.py index d5b44f3..0057fdf 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -12,6 +12,7 @@ from django.contrib.sites.shortcuts import get_current_site from api.tokens import account_activation_token from shared.cryptography import encryption_util +from tournaments.models.draw_log import DrawLog class EncryptedUserField(serializers.Field): def to_representation(self, value): @@ -230,3 +231,8 @@ class DeviceTokenSerializer(serializers.ModelSerializer): model = DeviceToken fields = '__all__' read_only_fields = ['user'] + +class DrawLogSerializer(serializers.ModelSerializer): + class Meta: + model = DrawLog + fields = '__all__' diff --git a/api/urls.py b/api/urls.py index ff61351..b221163 100644 --- a/api/urls.py +++ b/api/urls.py @@ -18,6 +18,7 @@ router.register(r'player-registrations', views.PlayerRegistrationViewSet) router.register(r'purchases', views.PurchaseViewSet) router.register(r'courts', views.CourtViewSet) router.register(r'date-intervals', views.DateIntervalViewSet) +router.register(r'draw-logs', views.DrawLogViewSet) router.register(r'failed-api-calls', views.FailedApiCallViewSet) router.register(r'logs', views.LogViewSet) router.register(r'device-token', views.DeviceTokenViewSet) diff --git a/api/views.py b/api/views.py index a8d84b5..f004f5d 100644 --- a/api/views.py +++ b/api/views.py @@ -1,5 +1,6 @@ from pandas.io.feather_format import pd -from .serializers import ClubSerializer, CourtSerializer, DateIntervalSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer, PurchaseSerializer, UserUpdateSerializer, FailedApiCallSerializer, LogSerializer, DeviceTokenSerializer +from tournaments.models.draw_log import DrawLog +from .serializers import ClubSerializer, CourtSerializer, DateIntervalSerializer, DrawLogSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer, PurchaseSerializer, UserUpdateSerializer, FailedApiCallSerializer, LogSerializer, DeviceTokenSerializer from tournaments.models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Court, DateInterval, Purchase, FailedApiCall, Log, DeviceToken from rest_framework import viewsets, permissions @@ -288,3 +289,15 @@ class DeviceTokenViewSet(viewsets.ModelViewSet): def perform_create(self, serializer): serializer.save(user=self.request.user) + +class DrawLogViewSet(viewsets.ModelViewSet): + queryset = DrawLog.objects.all() + serializer_class = DrawLogSerializer + + def get_queryset(self): + tournament_id = self.request.query_params.get('tournament') + if tournament_id: + return self.queryset.filter(tournament=tournament_id) + if self.request.user: + return self.queryset.filter(tournament__event__creator=self.request.user) + return [] diff --git a/tournaments/admin.py b/tournaments/admin.py index ff0fc5d..41c923f 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -2,6 +2,7 @@ from django.contrib import admin from tournaments.models import team_registration from tournaments.models.device_token import DeviceToken +from tournaments.models.draw_log import DrawLog from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall, Log from django.contrib.auth.admin import UserAdmin @@ -105,6 +106,11 @@ class LogAdmin(admin.ModelAdmin): class DeviceTokenAdmin(admin.ModelAdmin): list_display = ['user', 'value'] +class DrawLogAdmin(admin.ModelAdmin): + list_display = ['tournament', 'draw_date', 'draw_seed', 'draw_match_index', 'draw_team_position'] + list_filter = [SimpleTournamentListFilter] + ordering = ['draw_date'] + admin.site.register(CustomUser, CustomUserAdmin) admin.site.register(Club, ClubAdmin) admin.site.register(Event, EventAdmin) @@ -121,3 +127,4 @@ admin.site.register(DateInterval, DateIntervalAdmin) admin.site.register(FailedApiCall, FailedApiCallAdmin) admin.site.register(Log, LogAdmin) admin.site.register(DeviceToken, DeviceTokenAdmin) +admin.site.register(DrawLog, DrawLogAdmin) diff --git a/tournaments/migrations/0091_drawlog.py b/tournaments/migrations/0091_drawlog.py new file mode 100644 index 0000000..285b871 --- /dev/null +++ b/tournaments/migrations/0091_drawlog.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.11 on 2024-10-24 06:55 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournaments', '0090_tournament_initial_seed_count_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='DrawLog', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('draw_date', models.DateTimeField()), + ('draw_seed', models.IntegerField()), + ('draw_match_index', models.IntegerField()), + ('draw_team_position', models.IntegerField()), + ('tournament', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tournaments.tournament')), + ], + ), + ] diff --git a/tournaments/migrations/0091_club_timezone.py b/tournaments/migrations/0092_club_timezone.py similarity index 99% rename from tournaments/migrations/0091_club_timezone.py rename to tournaments/migrations/0092_club_timezone.py index 9ed2961..7fb0045 100644 --- a/tournaments/migrations/0091_club_timezone.py +++ b/tournaments/migrations/0092_club_timezone.py @@ -1,4 +1,4 @@ -# Generated by Django 5.1 on 2024-10-24 12:53 +# Generated by Django 5.1 on 2024-10-24 12:57 from django.db import migrations, models @@ -6,7 +6,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('tournaments', '0090_tournament_initial_seed_count_and_more'), + ('tournaments', '0091_drawlog'), ] operations = [ diff --git a/tournaments/models/draw_log.py b/tournaments/models/draw_log.py new file mode 100644 index 0000000..c09e099 --- /dev/null +++ b/tournaments/models/draw_log.py @@ -0,0 +1,10 @@ +from django.db import models +import uuid + +class DrawLog(models.Model): + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) + tournament = models.ForeignKey('Tournament', on_delete=models.CASCADE) + draw_date = models.DateTimeField() + draw_seed = models.IntegerField() + draw_match_index = models.IntegerField() + draw_team_position = models.IntegerField() diff --git a/tournaments/models/match.py b/tournaments/models/match.py index d2bb397..7aa7d71 100644 --- a/tournaments/models/match.py +++ b/tournaments/models/match.py @@ -42,6 +42,8 @@ class Match(models.Model): if self.tournament().event: club = self.tournament().event.club + if self.confirmed is False: + return "" if club: return club.court_name(index) elif index is not None: @@ -98,12 +100,18 @@ class Match(models.Model): return '' elif self.start_date: if self.started(): - return self.formatted_duration() + if self.confirmed: + return self.formatted_duration() + else: + return 'À suivre' else: # timezoned_datetime = timezone.localtime(self.start_date) timezone = self.tournament().timezone() local_start = self.start_date.astimezone(timezone) - return formats.date_format(local_start, format='l H:i') + if self.confirmed: + return formats.date_format(local_start, format='l H:i') + else: + return f"Estimée : {formats.date_format(local_start, format='l H:i')}" else: return 'À venir...'