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
24 changes: 23 additions & 1 deletion ecommerce/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,26 @@ It contains billing address model, shipping address model, order bank account mo

### Payments

It contains bank model and bank account model.
It contains bank model and bank account model.


## Rest API

### End points
/api/products/"
/api/categories/"
/api/stocks/"
/api/prices/"
/api/baskets/"
/api/basket-items/"
/api/cities/"
/api/countries/"
/api/customers/"
/api/addresses/"
/api/shipping-addresses/"
/api/billing-addresses/"
/api/order-bank-accounts/"
/api/orders/"
/api/order-items/"
/api/banks/"
/api/bank-accounts/"
15 changes: 15 additions & 0 deletions ecommerce/baskets/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django_filters import rest_framework as filters

from baskets.models import Basket, BasketItem

#Basket Filter

Choose a reason for hiding this comment

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

Bence bu ve bunun gibi comment'ler kaldirilabilir cunku class isminden anlayabilecegimizden baska extra bir bilgi vermiyor.

class BasketFilter(filters.FilterSet):
class Meta:
model = Basket
fields = ('customer', 'status')

#Basket Item Filter
class BasketItemFilter(filters.FilterSet):
class Meta:
model = BasketItem
fields = ("basket", "product", "quantity", "price")
30 changes: 30 additions & 0 deletions ecommerce/baskets/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from rest_framework import serializers

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


# Basket Serializer
class BasketSerializer(serializers.ModelSerializer):
class Meta:
model = Basket
fields = ('id', 'customer', 'status')


# Basket Detailed Serializer - nested serializer
class BasketDetailedSerializer(BasketSerializer):
customers = CustomerSerializer()

Choose a reason for hiding this comment

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

customers yanlış olmuş customer olmalı



# Basket Item Serializer
class BasketItemSerializer(serializers.ModelSerializer):
class Meta:
model = BasketItem
fields = ('id', 'basket', 'product', 'quantity', 'price')


# Basket Item Detailed Serializer - nested serializer
class BasketItemDetailedSerializer(BasketItemSerializer):
baskets = BasketSerializer()
products = ProductSerializer()
30 changes: 28 additions & 2 deletions ecommerce/baskets/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,29 @@
from django.shortcuts import render
from rest_framework import viewsets

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


# Basket ViewSet
class BasketViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = Basket.objects.all()
serializer_class = BasketSerializer
filterset_class = BasketFilter
serializer_action_classes = {
"detailed_list": BasketDetailedSerializer,
"detailed": BasketDetailedSerializer,
}


# Basket Item ViewSet
class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = BasketItem.objects.all()
serializer_class = BasketItemSerializer
filterset_class = BasketItemFilter
serializer_action_classes = {
"detailed_list": BasketItemDetailedSerializer,
"detailed": BasketItemDetailedSerializer,
}
46 changes: 46 additions & 0 deletions ecommerce/customers/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from django_filters import rest_framework as filters
from django.utils.translation import gettext_lazy as _

from customers.models import Customer, City, Country, Address


# Customer Filter
class CustomerFilter(filters.FilterSet):
first_name = filters.CharFilter(label=_("First Name"),
lookup_expr="icontains")
last_name = filters.CharFilter(label=_("Last Name"),
lookup_expr="icontains")
email = filters.CharFilter(label=_("Email"), lookup_expr="icontains")

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


# City Filter
class CityFilter(filters.FilterSet):
name = filters.CharFilter(label=_("City"), lookup_expr="icontains")

class Meta:
model = City
fields = ("name", "country")


# Country Filter
class CountryFilter(filters.FilterSet):
name = filters.CharFilter(label=_("Country"), lookup_expr="icontains")

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


# Address Filter
class AddressFilter(filters.FilterSet):
name = filters.CharFilter(label=_("Address"), lookup_expr="icontains")

class Meta:
model = Address
fields = (
"name", "full_name", "phone", "district", "zipcode", "customer",
"city",)
44 changes: 44 additions & 0 deletions ecommerce/customers/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from rest_framework import serializers

from customers.models import City, Country, Customer, Address


# City Serializer
class CitySerializer(serializers.ModelSerializer):
class Meta:
model = City
fields = ('id', 'name', 'country')


# Country Serializer
class CountrySerializer(serializers.ModelSerializer):
class Meta:
model = Country
fields = ('id', 'name')


# Customer Serializer
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = ('id', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'date_joined')


# Address Serializer
class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields = (
'id', 'customer', 'name', 'full_name', 'line_1', 'line_2', 'phone', 'district', 'zipcode', 'city',
'is_default')


# City Detailed Serializer - nested serializer
class CityDetailedSerializer(CitySerializer):
countries = CountrySerializer()


# Address Detailed Serializer - nested serializer
class AddressDetailedSerializer(AddressSerializer):
customers = CustomerSerializer
cities = CitySerializer
42 changes: 40 additions & 2 deletions ecommerce/customers/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,41 @@
from django.shortcuts import render
from rest_framework import viewsets

# Create your views here.
from core.mixins import DetailedViewSetMixin
from customers.filters import AddressFilter, CityFilter, CustomerFilter, CountryFilter
from customers.models import City, Country, Customer, Address
from customers.serializers import CitySerializer, CountrySerializer, CustomerSerializer, AddressSerializer, \
CityDetailedSerializer, AddressDetailedSerializer


class CityViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = City.objects.all()
serializer_class = CitySerializer
filterset_class = CityFilter
serializer_action_classes = {
"detailed_list": CityDetailedSerializer,
"detailed": CityDetailedSerializer,
}


class CountryViewSet(viewsets.ModelViewSet):
queryset = Country.objects.all()
serializer_class = CountrySerializer
filterset_class = CountryFilter


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


# Address ViewSet
class AddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = Address.objects.all()
serializer_class = AddressSerializer
filterset_class = AddressFilter
serializer_action_classes = {
"detailed_list": AddressDetailedSerializer,
"detailed": AddressDetailedSerializer,
}
11 changes: 4 additions & 7 deletions ecommerce/ecommerce/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])


# Application definition

INSTALLED_APPS = [
Expand All @@ -54,7 +53,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': 10 # Pagination added
}

MIDDLEWARE = [
Expand Down Expand Up @@ -88,13 +89,11 @@

WSGI_APPLICATION = 'ecommerce.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {'default': env.db('DATABASE_URL')}


# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators

Expand All @@ -113,7 +112,6 @@
},
]


# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

Expand All @@ -138,7 +136,6 @@ def gettext_noop(s):

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

Expand All @@ -151,4 +148,4 @@ def gettext_noop(s):
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
AUTH_USER_MODEL = "customers.Customer"

LOCALE_PATHS = (str(BASE_DIR / "locale/"), )
LOCALE_PATHS = (str(BASE_DIR / "locale/"),)
23 changes: 22 additions & 1 deletion ecommerce/ecommerce/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,31 @@
from django.urls import path, include

from ecommerce.router import router
from products.views import ProductViewSet, CategoryViewSet
from products.views import ProductViewSet, CategoryViewSet, StockViewSet, PriceViewSet
from baskets.views import BasketViewSet, BasketItemViewSet
from customers.views import CityViewSet, CountryViewSet, CustomerViewSet, AddressViewSet
from orders.views import ShippingAddressViewSet, BillingAddressViewSet, OrderBankAccountViewSet, OrderViewSet, \
OrderItemViewSet
from payments.views import BankViewSet, BankAccountViewSet

# Router Registrations for Each End Point
router.register("products", ProductViewSet)
router.register("categories", CategoryViewSet)
router.register("stocks", StockViewSet)
router.register("prices", PriceViewSet)
router.register("baskets", BasketViewSet)
router.register("basket-items", BasketItemViewSet)
router.register("cities", CityViewSet)
router.register("countries", CountryViewSet)
router.register("customers", CustomerViewSet)
router.register("addresses", AddressViewSet)
router.register("shipping-addresses", ShippingAddressViewSet)
router.register("billing-addresses", BillingAddressViewSet)
router.register("order-bank-accounts", OrderBankAccountViewSet)
router.register("orders", OrderViewSet)
router.register("order-items", OrderItemViewSet)
router.register("banks", BankViewSet)
router.register("bank-accounts", BankAccountViewSet)

urlpatterns = [
path("api/", include(router.urls)),
Expand Down
Loading