From 21b0e7193bcbce7d3de50ff9ad1722698e80f660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Bu=C4=9Fra=20Y=C4=B1ld=C4=B1r=C4=B1m?= Date: Sun, 19 Dec 2021 03:49:23 +0300 Subject: [PATCH] Register endpoints added, add to basket functiona added --- ecommerce/baskets/serializers.py | 1 + ecommerce/baskets/views.py | 17 +++++++++++++++++ ecommerce/customers/serializers.py | 18 ++++++++++++++++++ ecommerce/customers/views.py | 9 ++++++++- ecommerce/ecommerce/urls.py | 3 ++- 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/ecommerce/baskets/serializers.py b/ecommerce/baskets/serializers.py index 9dc4c30..0c53dd3 100644 --- a/ecommerce/baskets/serializers.py +++ b/ecommerce/baskets/serializers.py @@ -10,6 +10,7 @@ class BasketItemSerializer(serializers.ModelSerializer): class Meta: model = BasketItem fields = ("id", "basket", "product", "quantity", "price") + read_only_fields = ["basket", "price"] class BasketSerializer(serializers.ModelSerializer): diff --git a/ecommerce/baskets/views.py b/ecommerce/baskets/views.py index ee32571..c352780 100644 --- a/ecommerce/baskets/views.py +++ b/ecommerce/baskets/views.py @@ -1,4 +1,6 @@ from rest_framework import viewsets +from rest_framework.decorators import action +from rest_framework.response import Response from baskets.filters import BasketItemFilter, BasketFilter from baskets.models import BasketItem, Basket @@ -7,6 +9,7 @@ class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + http_method_names = ["get"] queryset = BasketItem.objects.all() serializer_class = BasketItemSerializer filterset_class = BasketItemFilter @@ -15,12 +18,26 @@ class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): "detailed": BasketItemDetailedSerializer, } + def get_queryset(self): + queryset = super().get_queryset() + user = self.request.user + return queryset.filter(basket__customer__id=user) + class BasketViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + permission_classes = () queryset = Basket.objects.all() serializer_class = BasketSerializer filterset_class = BasketFilter serializer_action_classes = { "detailed_list": BasketDetailedSerializer, "detailed": BasketDetailedSerializer, + "add_item_to_basket": BasketItemSerializer } + + @action(detail=True, methods=['post']) + def add_item_to_basket(self, request, pk=None): + serializer = BasketItemSerializer(data=request.data) + serializer.save() + + return Response(serializer.data) \ No newline at end of file diff --git a/ecommerce/customers/serializers.py b/ecommerce/customers/serializers.py index ffad735..eaff043 100644 --- a/ecommerce/customers/serializers.py +++ b/ecommerce/customers/serializers.py @@ -13,6 +13,24 @@ class Meta: fields = ("id", "first_name", "last_name", "email", "is_staff", "is_active", "date_joined") +class CustomerRegisterSerializer(serializers.ModelSerializer): + password = serializers.CharField(write_only=True) + + def create(self, validated_data): + customer = Customer.objects.create_user( + email=validated_data['email'], + password=validated_data["password"] + ) + customer.save() + return customer + + class Meta: + model = Customer + fields = ("id", "email", "first_name", "last_name", "password",) + + + + class ProfileSerializer(serializers.ModelSerializer): class Meta: diff --git a/ecommerce/customers/views.py b/ecommerce/customers/views.py index e2d05b6..985bbcd 100644 --- a/ecommerce/customers/views.py +++ b/ecommerce/customers/views.py @@ -8,7 +8,14 @@ from customers.models import Customer, Address, City, Country from customers.serializers import CustomerSerializer, AddressSerializer, CitySerializer, \ CountrySerializer, \ - AddressDetailedSerializer, CityDetailedSerializer, ProfileSerializer + AddressDetailedSerializer, CityDetailedSerializer, ProfileSerializer, CustomerRegisterSerializer + + +class CustomerRegisterViewSet(viewsets.ModelViewSet, mixins.CreateModelMixin): + permission_classes = () + http_method_names = ['post'] + queryset = Customer.objects.all() + serializer_class = CustomerRegisterSerializer class AdminCustomerViewSet(viewsets.ModelViewSet): diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index 28278ef..982ede0 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -21,7 +21,7 @@ from baskets.views import BasketItemViewSet, BasketViewSet from core.views import APITokenObtainPairView from customers.views import AddressViewSet, CityViewSet, \ - CountryViewSet, AdminCustomerViewSet, MyProfileViewSet + CountryViewSet, AdminCustomerViewSet, MyProfileViewSet, CustomerRegisterViewSet from ecommerce.router import router from orders.views import OrderItemViewSet, OrderViewSet, BillingAddressViewSet, ShippingAddressViewSet, \ OrderBankAccountViewSet @@ -46,6 +46,7 @@ router.register("banks", BankViewSet) router.register("admin-products", AdminProductViewSet, basename="admin-product") router.register("admin-customers", AdminCustomerViewSet, basename="admin-customer") +router.register("register", CustomerRegisterViewSet) urlpatterns = [