from rest_framework import generics, permissions from rest_framework.exceptions import PermissionDenied from rest_framework.response import Response from rest_framework.views import APIView from .models import VendorProfile from .serializers import ( CustomerRegistrationSerializer, UserMeSerializer, VendorProfileSerializer, VendorRegistrationSerializer, ) class VendorRegistrationView(generics.CreateAPIView): serializer_class = VendorRegistrationSerializer 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 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,) def get(self, request): return Response(UserMeSerializer(request.user).data) class VendorProfileMeView(generics.RetrieveUpdateAPIView): serializer_class = VendorProfileSerializer permission_classes = (permissions.IsAuthenticated,) def get_object(self): user = self.request.user if not user.is_vendor: raise PermissionDenied("Only vendors can access vendor profile setup.") return VendorProfile.objects.get(user=user)