You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
8.9 KiB
164 lines
8.9 KiB
from rest_framework import serializers
|
|
from .models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamState, TeamRegistration, PlayerRegistration
|
|
from django.contrib.auth import password_validation
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
class UserSerializer(serializers.HyperlinkedModelSerializer):
|
|
|
|
password = serializers.CharField(write_only=True)
|
|
|
|
def create(self, validated_data):
|
|
user = CustomUser.objects.create_user(
|
|
username=validated_data['username'],
|
|
password=validated_data['password'],
|
|
)
|
|
return user
|
|
|
|
class Meta:
|
|
club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all())
|
|
model = CustomUser
|
|
fields = ['id', 'username', 'password', 'club_id', 'umpire_code', 'clubs', 'phone', 'first_name', 'last_name', 'licence_id']
|
|
|
|
class ClubSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = Club
|
|
fields = ['id', 'name', 'acronym', 'phone', 'code', 'federal_club_data', 'address', 'city', 'zip_code', 'latitude', 'longitude']
|
|
|
|
class TournamentSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
# club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all())
|
|
event_id = serializers.PrimaryKeyRelatedField(queryset=Event.objects.all())
|
|
creator_id = serializers.PrimaryKeyRelatedField(queryset=CustomUser.objects.all())
|
|
model = Tournament
|
|
fields = ['id', 'name', 'event_id', 'creator_id', 'start_date', 'end_date', 'creation_date',
|
|
'is_private', 'format', 'group_stage_format', 'round_format', 'loser_round_format', 'bracket_sort_mode',
|
|
'group_stage_count', 'rank_source_date', 'day_duration', 'team_count', 'team_sorting',
|
|
'federal_category', 'federal_level_category', 'federal_age_category', 'group_stage_court_count',
|
|
'seed_count', 'closed_registration_date', 'group_stage_additional_qualified', 'court_count', 'prioritize_club_members',
|
|
'qualified_per_group_stage', 'teams_per_group_stage']
|
|
|
|
class EventSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all())
|
|
model = Event
|
|
fields = ['id', 'club_id', 'date', 'name', 'federal_tournament_data', 'court_count', 'tenup_id',
|
|
'group_stage_format', 'round_format', 'loser_round_format']
|
|
|
|
class RoundSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all())
|
|
loser_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all())
|
|
model = Round
|
|
fields = ['id', 'index', 'tournament_id', 'loser_id', 'format']
|
|
|
|
class GroupStageSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all())
|
|
model = GroupStage
|
|
fields = ['id', 'index', 'tournament_id', 'format']
|
|
|
|
class MatchSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
round_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all())
|
|
group_stage_id = serializers.PrimaryKeyRelatedField(queryset=GroupStage.objects.all())
|
|
model = Match
|
|
fields = ['id', 'round_id', 'group_stage_id', 'index', 'format', 'court', 'start_date', 'end_date',
|
|
'serving_team_id', 'winning_team_id', 'losing_team_id']
|
|
|
|
class TeamStateSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
match_id = serializers.PrimaryKeyRelatedField(queryset=Match.objects.all())
|
|
model = TeamState
|
|
fields = ['id', 'match_id', 'score', 'walk_out', 'lucky_loser']
|
|
|
|
class TeamRegistrationSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
match_id = serializers.PrimaryKeyRelatedField(queryset=Match.objects.all())
|
|
group_stage_id = serializers.PrimaryKeyRelatedField(queryset=GroupStage.objects.all())
|
|
model = TeamRegistration
|
|
fields = ['id', 'match_id', 'group_stage_id', 'registration_date', 'call_date', 'initial_position',
|
|
'group_stage_position', 'logo']
|
|
|
|
class PlayerRegistrationSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
team_registration_id = serializers.PrimaryKeyRelatedField(queryset=TeamRegistration.objects.all())
|
|
# team_state_id = serializers.PrimaryKeyRelatedField(queryset=TeamState.objects.all())
|
|
model = PlayerRegistration
|
|
fields = ['id', 'team_registration_id', 'first_name', 'last_name', 'licence_id', 'rank', 'has_paid']
|
|
|
|
class ChangePasswordSerializer(serializers.Serializer):
|
|
old_password = serializers.CharField(max_length=128, write_only=True, required=True)
|
|
new_password1 = serializers.CharField(max_length=128, write_only=True, required=True)
|
|
new_password2 = serializers.CharField(max_length=128, write_only=True, required=True)
|
|
|
|
def validate_old_password(self, value):
|
|
user = self.context['request'].user
|
|
if not user.check_password(value):
|
|
raise serializers.ValidationError(
|
|
_('Your old password was entered incorrectly. Please enter it again.')
|
|
)
|
|
return value
|
|
|
|
def validate(self, data):
|
|
if data['new_password1'] != data['new_password2']:
|
|
raise serializers.ValidationError({'new_password2': _("The two password fields didn't match.")})
|
|
password_validation.validate_password(data['new_password1'], self.context['request'].user)
|
|
return data
|
|
|
|
def save(self, **kwargs):
|
|
password = self.validated_data['new_password1']
|
|
user = self.context['request'].user
|
|
user.set_password(password)
|
|
user.save()
|
|
return user
|
|
|
|
class ExpandedMatchSerializer(serializers.HyperlinkedModelSerializer):
|
|
team_states = TeamStateSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
round_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all())
|
|
group_stage_id = serializers.PrimaryKeyRelatedField(queryset=GroupStage.objects.all())
|
|
model = Match
|
|
fields = ['id', 'round_id', 'group_stage_id', 'index', 'format', 'court', 'start_date', 'end_date',
|
|
'serving_team_id', 'winning_team_id', 'losing_team_id', 'team_states']
|
|
|
|
class ExpandedRoundSerializer(serializers.HyperlinkedModelSerializer):
|
|
match_set = ExpandedMatchSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all())
|
|
loser_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all())
|
|
model = Round
|
|
fields = ['id', 'index', 'tournament_id', 'loser_id', 'format', 'match_set']
|
|
|
|
class ExpandedGroupStageSerializer(serializers.HyperlinkedModelSerializer):
|
|
match_set = ExpandedMatchSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all())
|
|
model = GroupStage
|
|
fields = ['id', 'index', 'tournament_id', 'format', 'match_set']
|
|
|
|
class ExpandedTeamRegistrationSerializer(serializers.HyperlinkedModelSerializer):
|
|
playerregistration_set = PlayerRegistrationSerializer(many=True, read_only=True)
|
|
call_date = serializers.DateTimeField(format='%H:%M')
|
|
class Meta:
|
|
# match_id = serializers.PrimaryKeyRelatedField(queryset=Match.objects.all())
|
|
group_stage_id = serializers.PrimaryKeyRelatedField(queryset=GroupStage.objects.all())
|
|
model = TeamRegistration
|
|
fields = ['id', 'group_stage_id', 'registration_date', 'call_date', 'initial_position',
|
|
'group_stage_position', 'logo', 'playerregistration_set']
|
|
|
|
class ExpandedTournamentSerializer(serializers.HyperlinkedModelSerializer):
|
|
teamregistration_set = ExpandedTeamRegistrationSerializer(many=True, read_only=True)
|
|
round_set = ExpandedRoundSerializer(many=True, read_only=True)
|
|
groupstage_set = ExpandedGroupStageSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
# club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all())
|
|
event_id = serializers.PrimaryKeyRelatedField(queryset=Event.objects.all())
|
|
creator_id = serializers.PrimaryKeyRelatedField(queryset=CustomUser.objects.all())
|
|
|
|
model = Tournament
|
|
fields = ['id', 'name', 'event_id', 'creator_id', 'start_date', 'end_date', 'creation_date',
|
|
'is_private', 'format', 'group_stage_format', 'round_format', 'loser_round_format', 'bracket_sort_mode',
|
|
'group_stage_count', 'rank_source_date', 'day_duration', 'team_count', 'team_sorting',
|
|
'federal_category', 'federal_level_category', 'federal_age_category', 'group_stage_court_count',
|
|
'seed_count', 'closed_registration_date', 'group_stage_additional_qualified', 'court_count', 'prioritize_club_members',
|
|
'qualified_per_group_stage', 'teams_per_group_stage', 'teamregistration_set', 'round_set', 'groupstage_set']
|
|
|