Skip to content
This repository was archived by the owner on May 12, 2023. It is now read-only.
1 change: 1 addition & 0 deletions ecommerce/baskets/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
41 changes: 41 additions & 0 deletions ecommerce/baskets/views.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
from django.core.exceptions import ObjectDoesNotExist
from django.db.transaction import atomic
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
from baskets.serializers import BasketItemSerializer, BasketSerializer, BasketItemDetailedSerializer, BasketDetailedSerializer
from core.mixins import DetailedViewSetMixin
from products.models import Product


class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
Expand All @@ -15,12 +20,48 @@ class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"detailed": BasketItemDetailedSerializer,
}

def get_queryset(self):
queryset = super().get_queryset()
user_id = self.request.user.id
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 bir user yoksa, burada bir problem olusuyor sanki?

return queryset.filter(basket__customer__id=user_id)


class BasketViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
http_method_names = ["get", "delete"]
Copy link
Owner

Choose a reason for hiding this comment

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

basketi kullaniciya sildirmek guzel bir fikir olmayabilir.

queryset = Basket.objects.all()
serializer_class = BasketSerializer
filterset_class = BasketFilter
serializer_action_classes = {
"detailed_list": BasketDetailedSerializer,
"detailed": BasketDetailedSerializer,
"add_to_basket": BasketItemSerializer,
}

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

Choose a reason for hiding this comment

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

ayni sekilde login olmamis bir kullanici yoksa problem olusuyor sanki.


@atomic()
@action(detail=True, methods=['post'], http_method_names=['post'])
def add_to_basket(self, request, pk=None):
user_id = self.request.user.id
product = Product.objects.get(id=request.data["product"])
quantity = request.data["quantity"]
price = product.price
try:
basket = Basket.objects.get(customer__id=user_id, status="open")
Copy link
Owner

Choose a reason for hiding this comment

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

model objelerini kullanmak yerine serializerlari kullanmak daha iyi fikir.

except ObjectDoesNotExist:
basket = Basket.objects.create(customer_id=user_id, status="open")

try:
basket_item = BasketItem.objects.get(basket__customer__id=user_id, product=product)
basket_item.quantity += int(quantity)
except ObjectDoesNotExist:
basket_item = BasketItem.objects.create(basket=basket, product=product, quantity=int(quantity), price=price)

basket.save()
basket_item.save()

serializer = BasketItemSerializer(basket_item)
Copy link
Owner

Choose a reason for hiding this comment

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

basketviewseti basket'e ait bir serializer'i donmesi daha uyumlu olacaktir.

return Response(serializer.data)
18 changes: 18 additions & 0 deletions ecommerce/customers/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,24 @@ class Meta:
fields = ("id", "first_name", "last_name", "email", "is_staff", "is_active", "date_joined")


class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)

def create(self, validated_data):
customer = Customer.objects.create_user(
email=validated_data['email'],
first_name=validated_data['first_name'],
last_name=validated_data["last_name"],
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:
Expand Down
11 changes: 9 additions & 2 deletions ecommerce/customers/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,15 @@
from customers.filters import CustomerFilter, AddressFilter, CountryFilter, CityFilter
from customers.models import Customer, Address, City, Country
from customers.serializers import CustomerSerializer, AddressSerializer, CitySerializer, \
CountrySerializer, \
AddressDetailedSerializer, CityDetailedSerializer, ProfileSerializer
CountrySerializer, AddressDetailedSerializer, CityDetailedSerializer, \
ProfileSerializer, RegisterSerializer


class RegisterViewSet(viewsets.ModelViewSet, mixins.CreateModelMixin):
permission_classes = ()
http_method_names = ['post']
queryset = Customer.objects.all()
serializer_class = RegisterSerializer


class AdminCustomerViewSet(viewsets.ModelViewSet):
Expand Down
3 changes: 2 additions & 1 deletion ecommerce/ecommerce/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -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, RegisterViewSet
from ecommerce.router import router
from orders.views import OrderItemViewSet, OrderViewSet, BillingAddressViewSet, ShippingAddressViewSet, \
OrderBankAccountViewSet
Expand All @@ -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", RegisterViewSet)


urlpatterns = [
Expand Down
32 changes: 31 additions & 1 deletion ecommerce/orders/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from rest_framework import viewsets
from rest_framework import viewsets, permissions

from core.mixins import DetailedViewSetMixin
from core.utils import IsStaffUserAuthenticated
from orders.filters import OrderItemFilter, OrderFilter, BillingAddressFilter, ShippingAddressFilter, \
OrderBankAccountFilter
from orders.models import OrderItem, Order, BillingAddress, ShippingAddress, OrderBankAccount
Expand All @@ -18,6 +19,25 @@ class OrderItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"detailed": OrderItemDetailedSerializer,
}

def get_queryset(self):
queryset = super().get_queryset()
user_id = self.request.user.id
return queryset.filter(order__customer__id=user_id)


class AdminOrderViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
permission_classes = (
permissions.IsAuthenticated,
IsStaffUserAuthenticated
)
queryset = Order.objects.all()
serializer_class = OrderSerializer
filterset_class = OrderFilter
serializer_action_classes = {
"detailed_list": OrderDetailedSerializer,
"detailed": OrderDetailedSerializer,
}


class OrderViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = Order.objects.all()
Expand All @@ -28,6 +48,11 @@ class OrderViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"detailed": OrderDetailedSerializer,
}

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 Expand Up @@ -57,3 +82,8 @@ class OrderBankAccountViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
"detailed_list": OrderBankAccountDetailedSerializer,
"detailed": OrderBankAccountDetailedSerializer,
}

def get_queryset(self):
queryset = super().get_queryset()
user_id = self.request.user.id
return queryset.filter(order__customer__id=user_id)
1 change: 1 addition & 0 deletions ecommerce/payments/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class BankAccountViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):


class BankViewSet(viewsets.ModelViewSet):
http_method_names = ["get"]
queryset = Bank.objects.all()
serializer_class = BankSerializer
filterset_class = BankFilter
Expand Down