Fix code and migration conflict

online_registration
Laurent 1 year ago
commit f04039f3de
  1. 6
      api/serializers.py
  2. 1
      api/urls.py
  3. 15
      api/views.py
  4. 7
      tournaments/admin.py
  5. 26
      tournaments/migrations/0091_drawlog.py
  6. 4
      tournaments/migrations/0092_club_timezone.py
  7. 10
      tournaments/models/draw_log.py
  8. 12
      tournaments/models/match.py

@ -12,6 +12,7 @@ from django.contrib.sites.shortcuts import get_current_site
from api.tokens import account_activation_token from api.tokens import account_activation_token
from shared.cryptography import encryption_util from shared.cryptography import encryption_util
from tournaments.models.draw_log import DrawLog
class EncryptedUserField(serializers.Field): class EncryptedUserField(serializers.Field):
def to_representation(self, value): def to_representation(self, value):
@ -230,3 +231,8 @@ class DeviceTokenSerializer(serializers.ModelSerializer):
model = DeviceToken model = DeviceToken
fields = '__all__' fields = '__all__'
read_only_fields = ['user'] read_only_fields = ['user']
class DrawLogSerializer(serializers.ModelSerializer):
class Meta:
model = DrawLog
fields = '__all__'

@ -18,6 +18,7 @@ router.register(r'player-registrations', views.PlayerRegistrationViewSet)
router.register(r'purchases', views.PurchaseViewSet) router.register(r'purchases', views.PurchaseViewSet)
router.register(r'courts', views.CourtViewSet) router.register(r'courts', views.CourtViewSet)
router.register(r'date-intervals', views.DateIntervalViewSet) 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'failed-api-calls', views.FailedApiCallViewSet)
router.register(r'logs', views.LogViewSet) router.register(r'logs', views.LogViewSet)
router.register(r'device-token', views.DeviceTokenViewSet) router.register(r'device-token', views.DeviceTokenViewSet)

@ -1,5 +1,6 @@
from pandas.io.feather_format import pd 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 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 from rest_framework import viewsets, permissions
@ -288,3 +289,15 @@ class DeviceTokenViewSet(viewsets.ModelViewSet):
def perform_create(self, serializer): def perform_create(self, serializer):
serializer.save(user=self.request.user) 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 []

@ -2,6 +2,7 @@ from django.contrib import admin
from tournaments.models import team_registration from tournaments.models import team_registration
from tournaments.models.device_token import DeviceToken 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 .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall, Log
from django.contrib.auth.admin import UserAdmin from django.contrib.auth.admin import UserAdmin
@ -105,6 +106,11 @@ class LogAdmin(admin.ModelAdmin):
class DeviceTokenAdmin(admin.ModelAdmin): class DeviceTokenAdmin(admin.ModelAdmin):
list_display = ['user', 'value'] 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(CustomUser, CustomUserAdmin)
admin.site.register(Club, ClubAdmin) admin.site.register(Club, ClubAdmin)
admin.site.register(Event, EventAdmin) admin.site.register(Event, EventAdmin)
@ -121,3 +127,4 @@ admin.site.register(DateInterval, DateIntervalAdmin)
admin.site.register(FailedApiCall, FailedApiCallAdmin) admin.site.register(FailedApiCall, FailedApiCallAdmin)
admin.site.register(Log, LogAdmin) admin.site.register(Log, LogAdmin)
admin.site.register(DeviceToken, DeviceTokenAdmin) admin.site.register(DeviceToken, DeviceTokenAdmin)
admin.site.register(DrawLog, DrawLogAdmin)

@ -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')),
],
),
]

@ -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 from django.db import migrations, models
@ -6,7 +6,7 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('tournaments', '0090_tournament_initial_seed_count_and_more'), ('tournaments', '0091_drawlog'),
] ]
operations = [ operations = [

@ -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()

@ -42,6 +42,8 @@ class Match(models.Model):
if self.tournament().event: if self.tournament().event:
club = self.tournament().event.club club = self.tournament().event.club
if self.confirmed is False:
return ""
if club: if club:
return club.court_name(index) return club.court_name(index)
elif index is not None: elif index is not None:
@ -98,12 +100,18 @@ class Match(models.Model):
return '' return ''
elif self.start_date: elif self.start_date:
if self.started(): if self.started():
return self.formatted_duration() if self.confirmed:
return self.formatted_duration()
else:
return 'À suivre'
else: else:
# timezoned_datetime = timezone.localtime(self.start_date) # timezoned_datetime = timezone.localtime(self.start_date)
timezone = self.tournament().timezone() timezone = self.tournament().timezone()
local_start = self.start_date.astimezone(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: else:
return 'À venir...' return 'À venir...'

Loading…
Cancel
Save