diff --git a/api/serializers.py b/api/serializers.py index ec03749..61ac1a0 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -9,7 +9,6 @@ from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from django.utils.encoding import force_bytes from django.core.mail import EmailMessage from django.contrib.sites.shortcuts import get_current_site - from api.tokens import account_activation_token class UserSerializer(serializers.ModelSerializer): diff --git a/api/views.py b/api/views.py index b8d93d2..18c21ce 100644 --- a/api/views.py +++ b/api/views.py @@ -107,6 +107,38 @@ class PurchaseViewSet(viewsets.ModelViewSet): return self.queryset.filter(user=self.request.user) return [] + def create(self, request, *args, **kwargs): + identifier = request.data.get('identifier') + if Purchase.objects.filter(identifier=identifier).exists(): + return Response({"detail": "This transaction identifier is already registered."}, status=status.HTTP_208_ALREADY_REPORTED) + + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + self.perform_create(serializer) + headers = self.get_success_headers(serializer.data) + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + + # def create(self, request, *args, **kwargs): + # serializer = PurchaseSerializer(data=request.data) + # # Check if the serializer is valid + # # + # print('create') + # if serializer.is_valid(): + # print('isvalid') + + # identifier = serializer.validated_data['identifier'] + # # If the unique field already exists, return 208 + # if Purchase.objects.filter(identifier=identifier).exists(): + # print('return 208') + + # return Response({'detail': 'Already exists.'}, status=status.HTTP_208_ALREADY_REPORTED) + # # Otherwise, perform the creation + # self.perform_create(serializer) + # return Response(serializer.data, status=status.HTTP_201_CREATED) + # print('return 400') + + # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + def put(self, request, pk): raise MethodNotAllowed('PUT') diff --git a/tournaments/migrations/0082_alter_purchase_identifier_and_more.py b/tournaments/migrations/0082_alter_purchase_identifier_and_more.py new file mode 100644 index 0000000..0310ea3 --- /dev/null +++ b/tournaments/migrations/0082_alter_purchase_identifier_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1 on 2024-09-16 08:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournaments', '0081_round_group_stage_loser_bracket'), + ] + + operations = [ + migrations.AlterField( + model_name='purchase', + name='identifier', + field=models.BigIntegerField(unique=True), + ), + migrations.AlterField( + model_name='tournament', + name='federal_age_category', + field=models.IntegerField(choices=[(0, ''), (120, 'U12'), (140, 'U14'), (160, 'U16'), (180, 'U18'), (200, 'Senior'), (450, '+45 ans'), (550, '+55 ans')], default=200), + ), + ] diff --git a/tournaments/models/purchase.py b/tournaments/models/purchase.py index 6dc72e4..da2b335 100644 --- a/tournaments/models/purchase.py +++ b/tournaments/models/purchase.py @@ -5,7 +5,7 @@ from . import CustomUser class Purchase(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) user = models.ForeignKey(CustomUser, on_delete=models.CASCADE) - identifier = models.BigIntegerField() + identifier = models.BigIntegerField(unique=True) purchase_date = models.DateTimeField() product_id = models.CharField(max_length=100) quantity = models.IntegerField(null=True, blank=True)