Initial updates with FE

This commit is contained in:
2026-04-10 21:41:26 -05:00
parent 562a8525d0
commit bb8af62f2d
9 changed files with 119 additions and 11 deletions

View File

@@ -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

View File

@@ -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"),

View File

@@ -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,)