Compare commits

...

3 commits

4 changed files with 97 additions and 10 deletions

5
api/authentication.py Normal file
View file

@ -0,0 +1,5 @@
from rest_framework.authentication import SessionAuthentication
class CsrfExemptSessionAuthentication(SessionAuthentication):
def enforce_csrf(self, request):
return

View file

@ -30,11 +30,77 @@ class RegisterSerializer(serializers.Serializer):
user=user,
phone=validated_data['phone']
)
Wallet.objects.create(
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
outstanding=850.00 if is_test_user else 0.00,
withdrawn=1250.00 if is_test_user else 0.00
)
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 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 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
class ProductSerializer(serializers.ModelSerializer):

View file

@ -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,11 +120,19 @@ 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='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 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',
carrier='Pending',
tracking='Pending',
eta='N/A'
)
return Order.objects.filter(supplier=user)
@action(detail=True, methods=['post'])
@ -151,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='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')
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'])

View file

@ -133,3 +133,9 @@ MAILERS = {
'BACKEND': 'django.core.mail.backends.console.EmailBackend',
},
}
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'api.authentication.CsrfExemptSessionAuthentication',
),
}