from rest_framework import serializers from .models import Club, LiveMatch, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration from django.contrib.auth import password_validation from django.utils.translation import gettext_lazy as _ class UserSerializer(serializers.ModelSerializer): 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', 'umpire_code', 'clubs', 'phone', 'first_name', 'last_name', 'licence_id'] class ClubSerializer(serializers.ModelSerializer): class Meta: model = Club fields = ['id', 'name', 'acronym', 'phone', 'code', 'federal_club_data', 'address', 'city', 'zip_code', 'latitude', 'longitude'] class TournamentSerializer(serializers.ModelSerializer): 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', 'creator', '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.ModelSerializer): class Meta: # club_id = serializers.PrimaryKeyRelatedField(queryset=Club.objects.all()) model = Event fields = ['id', 'club', 'date', 'name', 'federal_tournament_data', 'court_count', 'tenup_id', 'group_stage_format', 'round_format', 'loser_round_format'] class RoundSerializer(serializers.ModelSerializer): class Meta: # tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all()) # loser_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all()) model = Round fields = ['id', 'index', 'tournament', 'loser', 'format'] class GroupStageSerializer(serializers.ModelSerializer): class Meta: # tournament_id = serializers.PrimaryKeyRelatedField(queryset=Tournament.objects.all()) model = GroupStage fields = ['id', 'index', 'tournament', 'format'] class MatchSerializer(serializers.ModelSerializer): class Meta: # round_id = serializers.PrimaryKeyRelatedField(queryset=Round.objects.all()) # group_stage_id = serializers.PrimaryKeyRelatedField(queryset=GroupStage.objects.all()) model = Match fields = ['id', 'round', 'group_stage', 'index', 'format', 'court', 'start_date', 'end_date', 'serving_team_id', 'winning_team_id', 'losing_team_id'] class TeamScoreSerializer(serializers.ModelSerializer): class Meta: # match_id = serializers.PrimaryKeyRelatedField(queryset=Match.objects.all()) model = TeamScore fields = ['id', 'match', 'score', 'walk_out', 'lucky_loser'] class TeamRegistrationSerializer(serializers.ModelSerializer): 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', 'registration_date', 'call_date', 'initial_position', 'group_stage_position', 'logo'] class PlayerRegistrationSerializer(serializers.ModelSerializer): 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', '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 LiveMatchSerializer(serializers.ModelSerializer): class Meta: model = LiveMatch fields = '__all__' # ['title', 'date'] # Serialize all fields of the model # class ExpandedMatchSerializer(serializers.ModelSerializer): # team_states = TeamScoreSerializer(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.ModelSerializer): # 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.ModelSerializer): # 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.ModelSerializer): # 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.ModelSerializer): # 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']