Skip to content
This repository was archived by the owner on May 12, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions ecommerce/baskets/serializers.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
from rest_framework import serializers

from baskets.models import BasketItem, Basket
from customers.serializers import CustomerSerializer
from products.serializers import ProductSerializer


class BasketItemSerializer(serializers.ModelSerializer):
class BasketSerializer(serializers.ModelSerializer):
customer = serializers.HiddenField(default=serializers.CurrentUserDefault())

class Meta:
model = BasketItem
fields = ("id", "basket", "product", "quantity", "price")
model = Basket
fields = ("id", "customer", "status")


class BasketSerializer(serializers.ModelSerializer):
class BasketItemSerializer(serializers.ModelSerializer):

class Meta:
model = Basket
fields = ("id", "customer", "status")
model = BasketItem
fields = ("id", "basket", "product", "quantity", "price")


class BasketItemDetailedSerializer(BasketItemSerializer):
Expand Down
27 changes: 25 additions & 2 deletions ecommerce/baskets/views.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from rest_framework import viewsets

from rest_framework import viewsets, status
from rest_framework.decorators import action
from rest_framework.response import Response
from baskets.filters import BasketItemFilter, BasketFilter
from baskets.models import BasketItem, Basket
from baskets.serializers import BasketItemSerializer, BasketSerializer, BasketItemDetailedSerializer, BasketDetailedSerializer
from core.mixins import DetailedViewSetMixin


class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
http_method_names = ["get"]
queryset = BasketItem.objects.all()
serializer_class = BasketItemSerializer
filterset_class = BasketItemFilter
Expand All @@ -15,12 +17,33 @@ class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"detailed": BasketItemDetailedSerializer,
}

def get_queryset(self):
queryset = super().get_queryset()
user = self.request.user
return queryset.filter(basket__customer=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": BasketItemSerializer
}

@action(detail=True, methods=['post'])
def add_item(self, request, pk=None):
serializer = BasketItemSerializer(data=request.data)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

price bilgisini kullanicidan almasak daha iyi olacaktir.


if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

basket viewset i basket'e ait bir serializer verisi donse daha iyi olacaktir.

return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

def get_queryset(self):
queryset = super().get_queryset()
user = self.request.user
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

login olmamis kullanici durumu varsa problem olusuyor sanki?

return queryset.filter(customer=user)
35 changes: 34 additions & 1 deletion ecommerce/core/serializers.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
from django.contrib.auth.password_validation import validate_password
from django.utils.translation import gettext_lazy as _

from rest_framework import serializers
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.validators import UniqueValidator
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer

from customers.models import Customer


class APITokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
Expand All @@ -14,3 +18,32 @@ def get_token(cls, user):
token["last_name"] = user.last_name
token["email"] = user.email
return token


class RegisterCustomerSerializer(serializers.ModelSerializer):

password_1 = serializers.CharField(required=True, write_only=True, validators=[validate_password],
style={"input_type": "password"})

password_2 = serializers.CharField(required=True, write_only=True, style={"input_type": "password"})

class Meta:
model = Customer
fields = ("email", "first_name", "last_name", "password_1", "password_2")

def validate(self, attrs):
if attrs["password_1"] != attrs["password_2"]:
raise serializers.ValidationError({"password_1": "Passwords didn't match"})
return attrs

def create(self, validated_data):
customer = Customer.objects.create(
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

manager'imizda create_user seklinde guzel bir methodumuz var.

email=validated_data["email"],
first_name=validated_data["first_name"],
last_name=validated_data["last_name"]
)

customer.set_password(validated_data["password_1"])
customer.save()

return customer
11 changes: 10 additions & 1 deletion ecommerce/core/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
from rest_framework import generics
from rest_framework.permissions import AllowAny
from rest_framework_simplejwt.views import TokenObtainPairView

from core.serializers import APITokenObtainPairSerializer
from core.serializers import APITokenObtainPairSerializer, RegisterCustomerSerializer
from customers.models import Customer


class APITokenObtainPairView(TokenObtainPairView):
serializer_class = APITokenObtainPairSerializer


class RegisterCustomerView(generics.CreateAPIView):
queryset = Customer.objects.all()
permission_classes = (AllowAny,)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

login olmus bir kullanici bu endpointe ulasmasa iyi olur.

serializer_class = RegisterCustomerSerializer
5 changes: 3 additions & 2 deletions ecommerce/ecommerce/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from rest_framework_simplejwt.views import TokenRefreshView

from baskets.views import BasketItemViewSet, BasketViewSet
from core.views import APITokenObtainPairView
from core.views import APITokenObtainPairView, RegisterCustomerView
from customers.views import AddressViewSet, CityViewSet, \
CountryViewSet, AdminCustomerViewSet, MyProfileViewSet
from ecommerce.router import router
Expand Down Expand Up @@ -55,9 +55,10 @@
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api/profile/', MyProfileViewSet.as_view(
{"get": "retrieve", "put": "update", "patch": "partial_update"}), name='profile'),
path('register/', RegisterCustomerView.as_view(), name='auth_register'),
]

if settings.DEBUG:
urlpatterns = urlpatterns + [
path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
]
]
2 changes: 2 additions & 0 deletions ecommerce/orders/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class Meta:

class OrderSerializer(serializers.ModelSerializer):

customer = serializers.HiddenField(default=serializers.CurrentUserDefault())

class Meta:
model = Order
fields = ("id", "customer", "basket", "status", "billing_address", "shipping_address", "total_price")
Expand Down
12 changes: 12 additions & 0 deletions ecommerce/orders/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from django.shortcuts import get_object_or_404
from rest_framework import viewsets

from core.mixins import DetailedViewSetMixin
Expand Down Expand Up @@ -28,6 +29,17 @@ class OrderViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"detailed": OrderDetailedSerializer,
}

def get_object(self):
queryset = self.get_queryset()
filter_kwargs = {"customer": self.request.user}
obj = get_object_or_404(queryset, **filter_kwargs)
return obj

def get_queryset(self):
queryset = super().get_queryset()
user = self.request.user
return queryset.filter(customer=user)


class BillingAddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = BillingAddress.objects.all()
Expand Down