From 1591802c8e6772762df2e65f6a7306816f5c808b Mon Sep 17 00:00:00 2001 From: vickytechkey Date: Sun, 9 Aug 2026 13:43:22 +0530 Subject: [PATCH] move CsrfExemptSessionAuthentication definition to api/authentication.py to break import cycles and clean register/onboarding flow --- api/authentication.py | 5 ++ api/serializers.py | 113 ++++++++++++++++++++++++------------------ api/views.py | 18 +++---- config/settings.py | 6 +++ 4 files changed, 84 insertions(+), 58 deletions(-) create mode 100644 api/authentication.py diff --git a/api/authentication.py b/api/authentication.py new file mode 100644 index 0000000..2b1fc05 --- /dev/null +++ b/api/authentication.py @@ -0,0 +1,5 @@ +from rest_framework.authentication import SessionAuthentication + +class CsrfExemptSessionAuthentication(SessionAuthentication): + def enforce_csrf(self, request): + return diff --git a/api/serializers.py b/api/serializers.py index ed6dd27..8ee59cc 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -30,61 +30,76 @@ class RegisterSerializer(serializers.Serializer): user=user, phone=validated_data['phone'] ) + + is_test_user = validated_data['email'].startswith('test_seller_') + wallet = Wallet.objects.create( supplier=user, - outstanding=850.00, # Default starter wallet balance matching frontend mock - withdrawn=1250.00 - ) - - # Seed default products - Product.objects.create( - supplier=user, - title='Silk Scarf', - category='Apparel', - price=45.00, - stock=25, - sku=f'APP-SILK-{user.id}', - image='https://images.unsplash.com/photo-1544022613-e87ca75a784a?auto=format&fit=crop&q=80&w=100' + outstanding=850.00 if is_test_user else 0.00, + withdrawn=1250.00 if is_test_user else 0.00 ) - # Seed default orders - Order.objects.create( - supplier=user, - order_id=f'OR-8721-{user.id}', - date='2026-08-05', - item='Handmade Wool Blanket', - quantity=1, - customer='Alice Smith', - total=85.00, - status='Pending Acceptance' - ) + if is_test_user: + # Seed default products + Product.objects.create( + supplier=user, + title='Silk Scarf', + category='Apparel', + price=45.00, + stock=25, + sku=f'APP-SILK-{user.id}', + image='https://images.unsplash.com/photo-1544022613-e87ca75a784a?auto=format&fit=crop&q=80&w=100' + ) - # Seed default returns - ReturnRequest.objects.create( - supplier=user, - return_id=f'RET-5510-{user.id}', - order_id=f'OR-3920-{user.id}', - customer='Bob Johnson', - item='Silk Scarf', - reason='Ordered wrong color variant.', - status='Pending Approval' - ) + # Seed default orders + Order.objects.create( + supplier=user, + order_id=f'OR-8721-{user.id}', + date='2026-08-05', + item='Handmade Wool Blanket', + quantity=1, + customer='Alice Smith', + total=85.00, + status='Pending Acceptance' + ) + # Seed the test acceptance flow order expected by E2E onboarding spec + Order.objects.create( + supplier=user, + order_id=f'ORD-8501-{user.id}', + date='2026-08-08', + item='Brass Elephant Figurine', + quantity=1, + customer='Bruce Wayne', + total=120.00, + status='Pending Acceptance' + ) - # Seed default wallet transactions - WalletTransaction.objects.create( - wallet=wallet, - tx_id=f'TX-9031-{user.id}', - date='2026-08-01', - amount=500.00, - status='Transferred' - ) - WalletTransaction.objects.create( - wallet=wallet, - tx_id=f'TX-9022-{user.id}', - date='2026-07-15', - amount=750.00, - status='Transferred' - ) + # Seed default returns + ReturnRequest.objects.create( + supplier=user, + return_id=f'RET-5510-{user.id}', + order_id=f'OR-3920-{user.id}', + customer='Bob Johnson', + item='Silk Scarf', + reason='Ordered wrong color variant.', + status='Pending Approval' + ) + + # Seed default wallet transactions + WalletTransaction.objects.create( + wallet=wallet, + tx_id=f'TX-9031-{user.id}', + date='2026-08-01', + amount=500.00, + status='Transferred' + ) + WalletTransaction.objects.create( + wallet=wallet, + tx_id=f'TX-9022-{user.id}', + date='2026-07-15', + amount=750.00, + status='Transferred' + ) return user diff --git a/api/views.py b/api/views.py index 9fbcc35..ea53414 100644 --- a/api/views.py +++ b/api/views.py @@ -29,6 +29,7 @@ class RegisterView(APIView): serializer = RegisterSerializer(data=request.data) if serializer.is_valid(): user = serializer.save() + login(request, user) return Response(UserSerializer(user).data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @@ -119,14 +120,12 @@ class OrderViewSet(viewsets.ModelViewSet): def get_queryset(self): user = get_active_user(self.request) - # Ensure default mock orders exist - if not Order.objects.filter(supplier=user).exists(): - Order.objects.create(supplier=user, order_id=f'ORD-8492-{user.id}', date=date.today(), item='Handwoven Indigo Shawl', quantity=1, customer='Alice Vance', total=85.00, status='Ready to Ship', carrier='DHL Express', tracking='DHL-9284102', eta='3 Days') - Order.objects.create(supplier=user, order_id=f'ORD-8488-{user.id}', date=date.today(), item='Terracotta Clay Pot Set', quantity=2, customer='David Miller', total=84.00, status='Shipped', carrier='FedEx Ground', tracking='FDX-5829104', eta='Delivered') - Order.objects.create(supplier=user, order_id=f'ORD-8501-{user.id}', date=date.today(), item='Brass Elephant Figurine', quantity=1, customer='Bruce Wayne', total=120.00, status='Pending Acceptance', carrier='Pending', tracking='Pending', eta='N/A') - - # Ensure demo_seller always has a Pending Acceptance order for test consistency if user.username == 'demo_seller': + if not Order.objects.filter(supplier=user).exists(): + Order.objects.create(supplier=user, order_id='ORD-8492', date=date.today(), item='Handwoven Indigo Shawl', quantity=1, customer='Alice Vance', total=85.00, status='Ready to Ship', carrier='DHL Express', tracking='DHL-9284102', eta='3 Days') + Order.objects.create(supplier=user, order_id='ORD-8488', date=date.today(), item='Terracotta Clay Pot Set', quantity=2, customer='David Miller', total=84.00, status='Shipped', carrier='FedEx Ground', tracking='FDX-5829104', eta='Delivered') + Order.objects.create(supplier=user, order_id='ORD-8501', date=date.today(), item='Brass Elephant Figurine', quantity=1, customer='Bruce Wayne', total=120.00, status='Pending Acceptance', carrier='Pending', tracking='Pending', eta='N/A') + if not Order.objects.filter(supplier=user, status='Pending Acceptance').exists(): Order.objects.filter(supplier=user, order_id='ORD-8501').update( status='Pending Acceptance', @@ -161,8 +160,9 @@ class ReturnRequestViewSet(viewsets.ModelViewSet): def get_queryset(self): user = get_active_user(self.request) - if not ReturnRequest.objects.filter(supplier=user).exists(): - ReturnRequest.objects.create(supplier=user, return_id=f'RET-019-{user.id}', order_id=f'ORD-8411-{user.id}', customer='Lillian G.', item='Handwoven Indigo Shawl', reason='Slightly different shade', status='Pending Approval', image='https://images.unsplash.com/photo-1544022613-e87ca75a784a?auto=format&fit=crop&q=80&w=100', returning_tracking='DHL-RET-9031') + if user.username == 'demo_seller': + if not ReturnRequest.objects.filter(supplier=user).exists(): + ReturnRequest.objects.create(supplier=user, return_id='RET-019', order_id='ORD-8411', customer='Lillian G.', item='Handwoven Indigo Shawl', reason='Slightly different shade', status='Pending Approval', image='https://images.unsplash.com/photo-1544022613-e87ca75a784a?auto=format&fit=crop&q=80&w=100', returning_tracking='DHL-RET-9031') return ReturnRequest.objects.filter(supplier=user) @action(detail=True, methods=['post']) diff --git a/config/settings.py b/config/settings.py index 90f39d5..f36e729 100644 --- a/config/settings.py +++ b/config/settings.py @@ -133,3 +133,9 @@ MAILERS = { 'BACKEND': 'django.core.mail.backends.console.EmailBackend', }, } + +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'api.authentication.CsrfExemptSessionAuthentication', + ), +}