diff --git a/api/serializers.py b/api/serializers.py index 380a849..9588991 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -13,6 +13,7 @@ from api.tokens import account_activation_token from shared.cryptography import encryption_util from tournaments.models.draw_log import DrawLog +from tournaments.models.enums import UserOrigin class EncryptedUserField(serializers.Field): def to_representation(self, value): @@ -69,6 +70,7 @@ class UserSerializer(serializers.ModelSerializer): group_stage_match_format_preference=validated_data.get('group_stage_match_format_preference'), loser_bracket_match_format_preference=validated_data.get('loser_bracket_match_format_preference'), loser_bracket_mode=validated_data.get('loser_bracket_mode'), + origin=UserOrigin.APP, ) self.send_email(self.context['request'], user) diff --git a/tournaments/admin.py b/tournaments/admin.py index 2bfaf36..9933d31 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -19,7 +19,8 @@ class CustomUserAdmin(UserAdmin): form = CustomUserChangeForm add_form = CustomUserCreationForm model = CustomUser - list_display = ['email', 'username', 'is_active', 'is_staff', 'first_name', 'last_name', 'date_joined', 'event_count', 'latest_event_club_name'] + list_display = ['email', 'username', 'is_active', 'is_staff', 'first_name', 'last_name', 'date_joined', 'event_count', 'latest_event_club_name', 'origin'] + list_filter = ['is_active', 'origin'] ordering = ['-date_joined'] fieldsets = [ (None, {'fields': ['id', 'username', 'email', 'password', 'first_name', 'last_name', 'is_active', @@ -27,7 +28,7 @@ class CustomUserAdmin(UserAdmin): 'summons_message_body', 'summons_message_signature', 'summons_available_payment_methods', 'summons_display_format', 'summons_display_entry_fee', 'summons_use_full_custom_message', 'match_formats_default_duration', 'bracket_match_format_preference', 'group_stage_match_format_preference', - 'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode', 'groups' + 'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode', 'groups', 'origin' ]}), ] add_fieldsets = [ @@ -49,14 +50,17 @@ class TournamentAdmin(admin.ModelAdmin): list_display = ['display_name', 'event', 'is_private', 'start_date', 'payment', 'creator'] list_filter = ['is_deleted', 'event__creator'] ordering = ['-start_date'] + search_fields = ['id'] class TeamRegistrationAdmin(admin.ModelAdmin): list_display = ['player_names', 'group_stage_position', 'name', 'tournament'] list_filter = [SimpleTournamentListFilter] + search_fields = ['id'] class TeamScoreAdmin(admin.ModelAdmin): list_display = ['team_registration', 'score', 'walk_out', 'match'] list_filter = [TeamScoreTournamentListFilter] + search_fields = ['id'] class RoundAdmin(admin.ModelAdmin): list_display = ['tournament', 'name', 'index', 'parent'] diff --git a/tournaments/migrations/0107_customuser_origin.py b/tournaments/migrations/0107_customuser_origin.py new file mode 100644 index 0000000..2e88038 --- /dev/null +++ b/tournaments/migrations/0107_customuser_origin.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1 on 2025-01-28 07:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournaments', '0106_alter_customuser_licence_id'), + ] + + operations = [ + migrations.AddField( + model_name='customuser', + name='origin', + field=models.IntegerField(blank=True, choices=[(0, 'Admin'), (1, 'Site'), (2, 'App')], default=0, null=True), + ), + ] diff --git a/tournaments/models/__init__.py b/tournaments/models/__init__.py index 3920dde..f076f05 100644 --- a/tournaments/models/__init__.py +++ b/tournaments/models/__init__.py @@ -2,7 +2,7 @@ from .custom_user import CustomUser from .club import Club from .court import Court from .date_interval import DateInterval -from .enums import TournamentPayment, FederalCategory, FederalLevelCategory, FederalAgeCategory, FederalMatchCategory, OnlineRegistrationStatus +from .enums import UserOrigin, TournamentPayment, FederalCategory, FederalLevelCategory, FederalAgeCategory, FederalMatchCategory, OnlineRegistrationStatus from .player_enums import PlayerSexType, PlayerDataSource, PlayerPaymentType from .event import Event from .tournament import Tournament, TeamSummon, TeamSortingType, TeamItem diff --git a/tournaments/models/custom_user.py b/tournaments/models/custom_user.py index e49d474..befa50d 100644 --- a/tournaments/models/custom_user.py +++ b/tournaments/models/custom_user.py @@ -32,6 +32,8 @@ class CustomUser(AbstractUser): device_id = models.CharField(max_length=50, null=True, blank=True) loser_bracket_mode = models.IntegerField(default=0) + origin = models.IntegerField(default=enums.UserOrigin.ADMIN, choices=enums.UserOrigin.choices, null=True, blank=True) + ### ### ### ### ### ### ### ### ### ### ### WARNING ### ### ### ### ### ### ### ### ### ### ### WARNING : Any added field MUST be inserted in the method below: fields_for_update() ### ### ### ### ### ### ### ### ### ### ### ### WARNING ### ### ### ### ### ### ### ### ### ### @@ -43,7 +45,7 @@ class CustomUser(AbstractUser): 'summons_message_body', 'summons_message_signature', 'summons_available_payment_methods', 'summons_display_format', 'summons_display_entry_fee', 'summons_use_full_custom_message', 'match_formats_default_duration', 'bracket_match_format_preference', - 'group_stage_match_format_preference', 'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode'] + 'group_stage_match_format_preference', 'loser_bracket_match_format_preference', 'device_id', 'loser_bracket_mode', 'origin'] def __str__(self): return self.username diff --git a/tournaments/models/enums.py b/tournaments/models/enums.py index 0ee32ce..666aca2 100644 --- a/tournaments/models/enums.py +++ b/tournaments/models/enums.py @@ -131,3 +131,8 @@ class OnlineRegistrationStatus(models.IntegerChoices): OnlineRegistrationStatus.ENDED_WITH_RESULTS: "Tournoi terminé" } return status_map.get(self, "") + +class UserOrigin(models.IntegerChoices): + ADMIN = 0, 'Admin' + SITE = 1, 'Site' + APP = 2, 'App' diff --git a/tournaments/views.py b/tournaments/views.py index dd5f79f..ad08a2c 100644 --- a/tournaments/views.py +++ b/tournaments/views.py @@ -14,7 +14,7 @@ from django.core.files.base import ContentFile from tournaments.models.device_token import DeviceToken -from .models import Court, DateInterval, Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Purchase, FailedApiCall +from .models import Court, DateInterval, Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Purchase, FailedApiCall, UserOrigin from .models import TeamSummon from datetime import datetime, timedelta import time @@ -627,6 +627,7 @@ def signup(request): if form.is_valid(): user = form.save(commit=False) user.is_active = False + user.origin = UserOrigin.SITE user.save() send_verification_email(request, user, next_url)