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
32 changes: 9 additions & 23 deletions ecommerce/README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,9 @@
### Core

It contains functions, classes and constants to be used as a basis in the core.

### Customers

It contains customer model and address model for customers.

### Products

It contains product model, category model, stock model and price model for products.

### Baskets

It contains basket model and basket item in basket model.

### Orders

It contains billing address model, shipping address model, order bank account model, order model and order item model.

### Payments

It contains bank model and bank account model.
## All models' serializers, filters, viewsets was created, these are;

Choose a reason for hiding this comment

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

  • I am a bit confused here, because these kind of information should'nt be added on README.md file, because you can alrady mention this infos in your commit and when you create a PR you can leave these information as a comment

1- Baskets
2- Customers
3- Orders
4- Payments
5- Products
## Also all models' serializer roots was created at the ecommerce/urls.py

## Pagination was added to ecommerce/settings.py
13 changes: 13 additions & 0 deletions ecommerce/baskets/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from django.db.models import Q
from django_filters import rest_framework as filters
from django.utils.translation import gettext_lazy as _

from baskets.models import Basket


class BasketFilter(filters.FilterSet):
name = filters.CharFilter(label=_("Name"), method="")
Copy link
Owner

Choose a reason for hiding this comment

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

eksik kalmis sanki?


class Meta:
model = Basket
fields = ("customer", )
22 changes: 22 additions & 0 deletions ecommerce/baskets/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

from rest_framework import serializers

from baskets.models import Basket, BasketItem



class BasketSerializer(serializers.ModelSerializer):

class Meta:
model = Basket
fields = ("customer", "status")


class BasketItemSerializer(serializers.ModelSerializer):

class Meta:
model = BasketItem
fields = ("basket", "product","quantity","price" )
Copy link
Owner

Choose a reason for hiding this comment

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

id eklememizde fayda var.


class BasketItemDetailedSerializer(BasketItemSerializer):
basket = BasketSerializer()
21 changes: 19 additions & 2 deletions ecommerce/baskets/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
from django.shortcuts import render
from rest_framework import viewsets

# Create your views here.
from core.mixins import DetailedViewSetMixin
from baskets.filters import BasketFilter
from baskets.models import Basket, BasketItem
from baskets.serializers import BasketSerializer, BasketItemSerializer, BasketItemDetailedSerializer

class BasketViewSet(viewsets.ModelViewSet):
queryset = Basket.objects.all()
serializer_class = BasketSerializer
filterset_class = BasketFilter

class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = BasketItem.objects.all()
serializer_class = BasketItemSerializer

Choose a reason for hiding this comment

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

  • I don't know these detailed views works as expected but maybe you can add code blocks in your detailed views;
serializer_action_classes = {
       "detailed_list": BasketDetailedSerializer,
       "detailed": BasketDetailedSerializer,
   }

class BasketItemDetailedViewSet(viewsets.ModelViewSet):
queryset = BasketItem.objects.all()
serializer_class = BasketItemDetailedSerializer
http_method_names = ["get"]
18 changes: 18 additions & 0 deletions ecommerce/customers/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

from django_filters import rest_framework as filters
from customers.models import Customer, Address




class CustomerFilter(filters.FilterSet):

class Meta:
model = Customer
fields = ("is_active", "is_staff")

class AddressFilter(filters.FilterSet):

class Meta:
model = Address
fields = ("name", "city")
46 changes: 46 additions & 0 deletions ecommerce/customers/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from django.db.transaction import atomic
from rest_framework import serializers
from customers.models import Customer, Address, City, Country

class CustomerSerializer(serializers.ModelSerializer):

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

class AddressSerializer(serializers.ModelSerializer):

class Meta:
model = Address
fields = ("customer", "name", "full_name", "line_1","line_2","phone","district","zipcode","city")


class CountrySerializer(serializers.ModelSerializer):

class Meta:
model = Country
fields = ("name", )

class CitySerializer(serializers.ModelSerializer):
country = CountrySerializer()
class Meta:
model = City
fields = ("name", "country")

class AddressDetailedSerializer(AddressSerializer):
customer = CustomerSerializer()
city = CitySerializer()


@atomic()
def create(self, validated_data):
customers = validated_data.pop("customers", None)
address = super().create(validated_data)
if customers:
serializer = CustomerSerializer(data=addresses, many=True)
serializer.is_valid(raise_exception=True)
serializer.save()
address.customers.add(*serializer.instance)

Choose a reason for hiding this comment

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

Customer ile Address arasında 1-M ilişki var. address modelinin customers adında bir fieldı yok.

return address


33 changes: 31 additions & 2 deletions ecommerce/customers/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,32 @@
from django.shortcuts import render
from rest_framework import viewsets
from core.mixins import DetailedViewSetMixin

# Create your views here.

from customers.filters import CustomerFilter, AddressFilter
from customers.models import Customer, Address, City, Country
from customers.serializers import CustomerSerializer, AddressSerializer, CitySerializer, CountrySerializer, \
AddressDetailedSerializer


class CustomerViewSet(viewsets.ModelViewSet):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
filterset_class = CustomerFilter

class AddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = Address.objects.all()
serializer_class = AddressSerializer
filterset_class = AddressFilter

class AddressDetailedViewSet(viewsets.ModelViewSet):
queryset = Address.objects.all()
serializer_class = AddressDetailedSerializer
http_method_names = ["get"]

class CityViewSet(viewsets.ModelViewSet):
queryset = City.objects.all()
serializer_class = CitySerializer

class CountryViewSet(viewsets.ModelViewSet):
queryset = Country.objects.all()
serializer_class = CountrySerializer
4 changes: 3 additions & 1 deletion ecommerce/ecommerce/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@
]

REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 100
}

MIDDLEWARE = [
Expand Down
43 changes: 41 additions & 2 deletions ecommerce/ecommerce/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,49 @@
from django.urls import path, include

from ecommerce.router import router
from products.views import ProductViewSet, CategoryViewSet

from products.views import ProductViewSet, CategoryViewSet, ProductDetailedViewSet
from customers.views import CustomerViewSet, AddressViewSet, AddressDetailedViewSet, CityViewSet, CountryViewSet
from baskets.views import BasketViewSet, BasketItemViewSet, BasketItemDetailedViewSet
from payments.views import BankViewSet, BankAccountViewSet, BankAccountDetailedViewSet
from orders.views import OrderViewSet, OrderItemViewSet, OrderBankAccountViewSet, ShippingAddressViewSet, BillingAddressViewSet, OrderDetailedViewSet
"""
## these routers was designed for showing all details about Product and Product's Category Details
"""
# Product Routers
router.register("products", ProductViewSet)
router.register("products-detailed", ProductDetailedViewSet, basename="product-detailed")
router.register("categories", CategoryViewSet)
"""
## these routers was designed for showing all details about Customer and Full Address Details
"""
#Customer Routers
router.register("customers", CustomerViewSet)
router.register("addresses", AddressViewSet)
router.register("cities", CityViewSet)
router.register("countries", CountryViewSet)
router.register("addresses-detailed", AddressDetailedViewSet, basename="address-detailed")

"""
## these routers was designed for showing all details about Basket and Basket Items
"""
#Basket Routers
router.register("baskets", BasketViewSet)
router.register("basketitems", BasketItemViewSet)
router.register("basketitems-detailed", BasketItemDetailedViewSet, basename="basket-detailed")

#Payments Routers
router.register("banks", BankViewSet )
router.register("bankaccounts", BankAccountViewSet)
router.register("bankaccounts-detailed", BankAccountDetailedViewSet, basename="payment-detailed")

#Order Routers
router.register("order", OrderViewSet )
router.register("orderitems", OrderItemViewSet )
router.register("orderbankaccount", OrderBankAccountViewSet )
router.register("shippingaddress", ShippingAddressViewSet )
router.register("billingaddress", BillingAddressViewSet )
router.register("order-detailed", OrderDetailedViewSet, basename="order-detailed")


urlpatterns = [
path("api/", include(router.urls)),
Expand Down
13 changes: 13 additions & 0 deletions ecommerce/orders/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

from django_filters import rest_framework as filters
from django.utils.translation import gettext_lazy as _

from orders.models import Order


class OrderFilter(filters.FilterSet):
name = filters.CharFilter(label=_("Name"), method="")

class Meta:
model = Order
fields = ("customer", "status")
42 changes: 42 additions & 0 deletions ecommerce/orders/serializer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from rest_framework import serializers

from orders.models import Order, OrderItem, OrderBankAccount, ShippingAddress, BillingAddress
from customers.serializers import CustomerSerializer
from baskets.serializers import BasketSerializer

class BillingAddressSerializer(serializers.ModelSerializer):

class Meta:
model = BillingAddress
fields = ("full_name", "line_1", "line_2", "phone","district", "zipcode", "city")

class ShippingAddressSerializer(serializers.ModelSerializer):

class Meta:
model = ShippingAddress
fields = ("full_name", "line_1", "line_2", "phone","district", "zipcode", "city")

class OrderBankAccountSerializer(serializers.ModelSerializer):

class Meta:
model = OrderBankAccount
fields = ("name", "iban", "bank_name", "order")

class OrderSerializer(serializers.ModelSerializer):

class Meta:
model = Order
fields = ("customer", "basket","status","billing_address", "shipping_address","total_price" )


class OrderItemSerializer(serializers.ModelSerializer):

class Meta:
model = OrderItem
fields = ("order", "product","price" )

class OrderDetailedSerializer(OrderSerializer):
billing_address = BillingAddressSerializer()
shipping_address = ShippingAddressSerializer()
customer = CustomerSerializer()
basket = BasketSerializer()
34 changes: 32 additions & 2 deletions ecommerce/orders/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,33 @@
from django.shortcuts import render
from rest_framework import viewsets
from core.mixins import DetailedViewSetMixin
from orders.filters import OrderFilter
from orders.models import Order, OrderItem, OrderBankAccount, ShippingAddress, BillingAddress
from orders.serializer import OrderSerializer, OrderItemSerializer, OrderBankAccountSerializer, BillingAddressSerializer, ShippingAddressSerializer, \
OrderDetailedSerializer

# Create your views here.

class OrderViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = Order.objects.all()
filterset_class = OrderFilter
serializer_class = OrderSerializer

class OrderBankAccountViewSet(viewsets.ModelViewSet):
queryset = OrderBankAccount.objects.all()
serializer_class = OrderBankAccountSerializer

class OrderItemViewSet(viewsets.ModelViewSet):
queryset = OrderItem.objects.all()
serializer_class = OrderItemSerializer

class ShippingAddressViewSet(viewsets.ModelViewSet):
queryset = ShippingAddress.objects.all()
serializer_class = ShippingAddressSerializer

class BillingAddressViewSet(viewsets.ModelViewSet):
queryset = BillingAddress.objects.all()
serializer_class = BillingAddressSerializer

class OrderDetailedViewSet(viewsets.ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrderDetailedSerializer
http_method_names = ["get"]
13 changes: 13 additions & 0 deletions ecommerce/payments/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

from django_filters import rest_framework as filters
from django.utils.translation import gettext_lazy as _

from payments.models import BankAccount


class BankAccountFilter(filters.FilterSet):
name = filters.CharFilter(label=_("Name"), method="")

class Meta:
model = BankAccount
fields = ("bank",)
21 changes: 21 additions & 0 deletions ecommerce/payments/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

from rest_framework import serializers

from payments.models import Bank, BankAccount


class BankSerializer(serializers.ModelSerializer):

class Meta:
model = Bank
fields = ("name", )


class BankAccountSerializer(serializers.ModelSerializer):

class Meta:
model = BankAccount
fields = ("bank", "name", "iban")

class BankAccountDetailedSerializer(BankAccountSerializer):
bank = BankSerializer()
Loading