Initial updates with FE
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import VendorProfile
|
||||
from .models import CustomerProfile, VendorProfile
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
@@ -74,8 +75,46 @@ class VendorRegistrationSerializer(serializers.Serializer):
|
||||
return user
|
||||
|
||||
|
||||
class CustomerProfileSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = CustomerProfile
|
||||
fields = (
|
||||
"preferred_contact_method",
|
||||
"emergency_contact_name",
|
||||
"emergency_contact_phone",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
)
|
||||
read_only_fields = fields
|
||||
|
||||
|
||||
class CustomerRegistrationSerializer(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)
|
||||
|
||||
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):
|
||||
password = validated_data.pop("password")
|
||||
user = User.objects.create_user(
|
||||
password=password,
|
||||
is_vendor=False,
|
||||
is_customer=True,
|
||||
**validated_data,
|
||||
)
|
||||
CustomerProfile.objects.create(user=user)
|
||||
return user
|
||||
|
||||
|
||||
class UserMeSerializer(serializers.ModelSerializer):
|
||||
vendor_profile = VendorProfileSerializer(read_only=True)
|
||||
customer_profile = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
@@ -88,4 +127,12 @@ class UserMeSerializer(serializers.ModelSerializer):
|
||||
"is_vendor",
|
||||
"is_customer",
|
||||
"vendor_profile",
|
||||
"customer_profile",
|
||||
)
|
||||
|
||||
def get_customer_profile(self, obj):
|
||||
try:
|
||||
profile = obj.customer_profile
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
return CustomerProfileSerializer(profile).data
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
from django.urls import path
|
||||
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
|
||||
|
||||
from .views import MeView, VendorProfileMeView, VendorRegistrationView
|
||||
from .views import (
|
||||
CustomerRegistrationView,
|
||||
MeView,
|
||||
PasswordResetRequestView,
|
||||
VendorProfileMeView,
|
||||
VendorRegistrationView,
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
path("register/vendor/", VendorRegistrationView.as_view(), name="register_vendor"),
|
||||
path("register/customer/", CustomerRegistrationView.as_view(), name="register_customer"),
|
||||
path("password/reset/request/", PasswordResetRequestView.as_view(), name="password_reset_request"),
|
||||
path("token/", TokenObtainPairView.as_view(), name="token_obtain_pair"),
|
||||
path("token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
|
||||
path("me/", MeView.as_view(), name="me"),
|
||||
|
||||
@@ -4,7 +4,12 @@ from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from .models import VendorProfile
|
||||
from .serializers import UserMeSerializer, VendorProfileSerializer, VendorRegistrationSerializer
|
||||
from .serializers import (
|
||||
CustomerRegistrationSerializer,
|
||||
UserMeSerializer,
|
||||
VendorProfileSerializer,
|
||||
VendorRegistrationSerializer,
|
||||
)
|
||||
|
||||
|
||||
class VendorRegistrationView(generics.CreateAPIView):
|
||||
@@ -18,6 +23,31 @@ class VendorRegistrationView(generics.CreateAPIView):
|
||||
return Response(UserMeSerializer(user).data, status=201)
|
||||
|
||||
|
||||
class CustomerRegistrationView(generics.CreateAPIView):
|
||||
serializer_class = CustomerRegistrationSerializer
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
user = serializer.save()
|
||||
return Response(UserMeSerializer(user).data, status=201)
|
||||
|
||||
|
||||
class PasswordResetRequestView(APIView):
|
||||
"""Accepts email for UX parity; outbound email is not wired yet."""
|
||||
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def post(self, request):
|
||||
return Response(
|
||||
{
|
||||
"detail": "If an account exists for this email, you will receive password reset instructions once email delivery is enabled."
|
||||
},
|
||||
status=200,
|
||||
)
|
||||
|
||||
|
||||
class MeView(APIView):
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user