seller_central_backend/api/serializers.py
vickytechkey 1591802c8e
All checks were successful
Build and Deploy Beta / build-and-push (push) Successful in 1m14s
Build and Deploy Beta / deploy (push) Successful in 10s
move CsrfExemptSessionAuthentication definition to api/authentication.py to break import cycles and clean register/onboarding flow
2026-08-09 13:43:22 +05:30

134 lines
4.4 KiB
Python

from rest_framework import serializers
from django.contrib.auth.models import User
from .models import SupplierProfile, Product, Order, ReturnRequest, Wallet, WalletTransaction
class SupplierProfileSerializer(serializers.ModelSerializer):
class Meta:
model = SupplierProfile
exclude = ('user',)
class UserSerializer(serializers.ModelSerializer):
profile = SupplierProfileSerializer(read_only=True)
class Meta:
model = User
fields = ('id', 'username', 'email', 'profile')
class RegisterSerializer(serializers.Serializer):
username = serializers.CharField(required=True)
email = serializers.EmailField(required=True)
phone = serializers.CharField(required=True)
password = serializers.CharField(required=True, write_only=True)
def create(self, validated_data):
user = User.objects.create_user(
username=validated_data['username'],
email=validated_data['email'],
password=validated_data['password']
)
SupplierProfile.objects.create(
user=user,
phone=validated_data['phone']
)
is_test_user = validated_data['email'].startswith('test_seller_')
wallet = Wallet.objects.create(
supplier=user,
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):
class Meta:
model = Product
fields = '__all__'
read_only_fields = ('supplier',)
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = '__all__'
read_only_fields = ('supplier',)
class ReturnRequestSerializer(serializers.ModelSerializer):
class Meta:
model = ReturnRequest
fields = '__all__'
read_only_fields = ('supplier',)
class WalletTransactionSerializer(serializers.ModelSerializer):
class Meta:
model = WalletTransaction
fields = '__all__'
class WalletSerializer(serializers.ModelSerializer):
transactions = WalletTransactionSerializer(many=True, read_only=True)
class Meta:
model = Wallet
fields = ('outstanding', 'withdrawn', 'transactions')