Files
booking_backend/accounts/serializers.py
2026-04-10 20:51:43 -05:00

92 lines
3.5 KiB
Python

from django.contrib.auth import get_user_model
from rest_framework import serializers
from .models import VendorProfile
User = get_user_model()
class VendorProfileSerializer(serializers.ModelSerializer):
class Meta:
model = VendorProfile
fields = (
"business_name",
"slug",
"description",
"contact_phone",
"contact_email",
"address_line1",
"address_line2",
"city",
"state",
"postal_code",
"country",
"created_at",
"updated_at",
)
read_only_fields = ("slug", "created_at", "updated_at")
class VendorRegistrationSerializer(serializers.Serializer):
email = serializers.EmailField()
password = serializers.CharField(write_only=True, min_length=8)
first_name = serializers.CharField(required=False, allow_blank=True, max_length=150)
last_name = serializers.CharField(required=False, allow_blank=True, max_length=150)
phone_number = serializers.CharField(required=False, allow_blank=True, max_length=32)
business_name = serializers.CharField(max_length=255)
description = serializers.CharField(required=False, allow_blank=True)
contact_phone = serializers.CharField(required=False, allow_blank=True, max_length=32)
contact_email = serializers.EmailField(required=False, allow_blank=True)
address_line1 = serializers.CharField(required=False, allow_blank=True, max_length=255)
address_line2 = serializers.CharField(required=False, allow_blank=True, max_length=255)
city = serializers.CharField(required=False, allow_blank=True, max_length=100)
state = serializers.CharField(required=False, allow_blank=True, max_length=100)
postal_code = serializers.CharField(required=False, allow_blank=True, max_length=32)
country = serializers.CharField(required=False, allow_blank=True, max_length=100)
def validate_email(self, value):
if User.objects.filter(email__iexact=value).exists():
raise serializers.ValidationError("A user with this email already exists.")
return value
def create(self, validated_data):
profile_data = {
"business_name": validated_data.pop("business_name"),
"description": validated_data.pop("description", ""),
"contact_phone": validated_data.pop("contact_phone", ""),
"contact_email": validated_data.pop("contact_email", ""),
"address_line1": validated_data.pop("address_line1", ""),
"address_line2": validated_data.pop("address_line2", ""),
"city": validated_data.pop("city", ""),
"state": validated_data.pop("state", ""),
"postal_code": validated_data.pop("postal_code", ""),
"country": validated_data.pop("country", ""),
}
password = validated_data.pop("password")
user = User.objects.create_user(
password=password,
is_vendor=True,
is_customer=False,
**validated_data,
)
VendorProfile.objects.create(user=user, **profile_data)
return user
class UserMeSerializer(serializers.ModelSerializer):
vendor_profile = VendorProfileSerializer(read_only=True)
class Meta:
model = User
fields = (
"id",
"email",
"first_name",
"last_name",
"phone_number",
"is_vendor",
"is_customer",
"vendor_profile",
)