Skip to content
This repository was archived by the owner on May 12, 2023. It is now read-only.
Open
2 changes: 1 addition & 1 deletion ecommerce/.env.dist
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
DEBUG=True
SECRET_KEY=secret_key
DATABASE_URL=psql://superuser_username:superuser_password@server_ip:server_port/db_name
DATABASE_URL=psql://username:password@ipaddress:port/db_name
ALLOWED_HOSTS=127.0.0.1,0.0.0.0
TIME_ZONE=Europe/Istanbul
20 changes: 20 additions & 0 deletions ecommerce/baskets/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
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, BasketItem


class BasketFilter(filters.FilterSet):
status = filters.CharFilter(label=_("Status"), method="filter_name")

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


class BasketItemFilter(filters.FilterSet):

class Meta:
model = BasketItem
fields = ("basket", "product", "price")
2 changes: 2 additions & 0 deletions ecommerce/baskets/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ class Basket(BaseAbstractModel):
status = models.CharField(choices=enums.BasketStatus.choices, max_length=10,
verbose_name=_("Basket Status"), default=enums.BasketStatus.OPEN)



class Meta:
verbose_name = _("Basket")
verbose_name_plural = _("Baskets")
Expand Down
16 changes: 16 additions & 0 deletions ecommerce/baskets/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from rest_framework import serializers
from baskets.models import Basket, BasketItem


class BasketSerializers(serializers.ModelSerializer):
Copy link
Owner

Choose a reason for hiding this comment

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

genelde cogul olarak kullanilmiyor.


class Meta:
model = Basket
fields = "__all__"
Copy link
Owner

Choose a reason for hiding this comment

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

bu kullanim cok tercih edilmiyor, acik olarak yazmakta fayda var.



class BasketItemSerializers(serializers.ModelSerializer):

class Meta:
model = BasketItem
fields = "__all__"
20 changes: 18 additions & 2 deletions ecommerce/baskets/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
from django.shortcuts import render
from rest_framework import viewsets

# Create your views here.
from core.mixins import DetailedViewSetMixin

from baskets.models import Basket, BasketItem
from baskets.filters import BasketFilter, BasketItemFilter
from baskets.serializers import BasketSerializers, BasketItemSerializers


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


class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = BasketItem.objects.all()
serializer_class = BasketItemSerializers
filterset_class = BasketItemFilter
42 changes: 42 additions & 0 deletions ecommerce/customers/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from django.utils.translation import gettext_lazy as _

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


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")


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

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


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

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


class AddressFilter(filters.FilterSet):
customer = CustomerFilter
city = CityFilter
name = filters.CharFilter(label=_("Address"), lookup_expr="icontains")

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

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


class CustomerSerializer(serializers.ModelSerializer):

class Meta:
model = Customer
fields = "__all__"


class CitySerializer(serializers.ModelSerializer):
class Meta:
model = City
fields = "__all__"


class CountrySerializer(serializers.ModelSerializer):
class Meta:
model = Country
fields = "__all__"


class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields = "__all__"


class CityDetailedSerializer(CitySerializer):
country = CountrySerializer()


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


39 changes: 37 additions & 2 deletions ecommerce/customers/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
from django.shortcuts import render
from rest_framework import viewsets

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


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


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(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = Country.objects.all()
serializer_class = CountrySerializer
filterset_class = CountryFilter


class AddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = Address.objects.all()
serializer_class = AddressSerializer
filterset_class = AddressFilter
serializer_action_classes = {
"detailed_list": AddressDetailedSerializer,
"detailed": AddressDetailedSerializer
}
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': 5
}

MIDDLEWARE = [
Expand Down
24 changes: 23 additions & 1 deletion ecommerce/ecommerce/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,35 @@
from django.contrib import admin
from django.urls import path, include

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

router.register("products", ProductViewSet)
router.register("categories", CategoryViewSet)

router.register("baskets", BasketViewSet)
router.register("basket-items", BasketItemViewSet)

router.register("customers", CustomerViewSet)
router.register("cities", CityViewSet)
router.register("countries", CountryViewSet)
router.register("addresses", AddressViewSet)

router.register("billing-address", BillingAddressViewSet)
router.register("shipping-address", ShippingAddressViewSet)
router.register("order", OrderViewSet)
router.register("order-bank-account", OrderBankAccountViewSet)
router.register("order-item", OrderItemViewSet)

router.register("banks", BankViewSet)
router.register("bank-accounts", BankAccountViewSet)

urlpatterns = [
path("api/", include(router.urls)),
path('admin/', admin.site.urls),
path('', admin.site.urls),
]
57 changes: 57 additions & 0 deletions ecommerce/orders/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from django.utils.translation import gettext_lazy as _
from django_filters import rest_framework as filters

from baskets.filters import BasketFilter
from customers.filters import CityFilter, CustomerFilter
from orders.models import BillingAddress, ShippingAddress, OrderBankAccount, Order, OrderItem
from products.filters import ProductFilter


class BillingAddressFilter(filters.FilterSet):
full_name = filters.CharFilter(label=_("Full Billing Address"), lookup_expr="icontains")
phone = filters.CharFilter(label=_("Phone"), lookup_expr="iexact")
city = CityFilter

class Meta:
model = BillingAddress
fields = ("full_name", "phone", "city",)


class ShippingAddressFilter(filters.FilterSet):
full_name = filters.CharFilter(label=_("Full Shipping Address"), lookup_expr="icontains")
phone = filters.CharFilter(label=_("Phone"), lookup_expr="iexact")
city = CityFilter

class Meta:
model = ShippingAddress
fields = ("full_name", "phone", "city",)


class OrderFilter(filters.FilterSet):
customer = CustomerFilter
basket = BasketFilter
status = filters.CharFilter(label=_("Status"), lookup_expr="iexact")

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


class OrderBankAccountFilter(filters.FilterSet):
order = OrderFilter
name = filters.CharFilter(label=_("City Name"), lookup_expr="icontains")
iban = filters.CharFilter(label=_("IBAN"), lookup_expr="iexact")
bank_name = filters.CharFilter(label=_("Bank Name"), lookup_expr="icontains")

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


class OrderItemFilter(filters.FilterSet):
order = OrderFilter
product = ProductFilter

class Meta:
model = OrderItem
fields = ("order", "product",)
35 changes: 35 additions & 0 deletions ecommerce/orders/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from rest_framework import serializers
from orders.models import BillingAddress, ShippingAddress, OrderBankAccount, Order, OrderItem


class BillingAddressSerializer(serializers.ModelSerializer):
class Meta:
model = BillingAddress
fields = '__all__'


class ShippingAddressSerializer(serializers.ModelSerializer):
class Meta:
model = ShippingAddress
fields = '__all__'



class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = '__all__'


class OrderBankAccountSerializer(serializers.ModelSerializer):

class Meta:
model = OrderBankAccount
fields = '__all__'


class OrderItemSerializer(serializers.ModelSerializer):

class Meta:
model = OrderItem
fields = '__all__'
43 changes: 41 additions & 2 deletions ecommerce/orders/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
from django.shortcuts import render
from rest_framework import viewsets

# Create your views here.
from core.mixins import DetailedViewSetMixin
from orders.filters import BillingAddressFilter, OrderBankAccountFilter, OrderFilter, \
OrderItemFilter, ShippingAddressFilter
from orders.serializers import BillingAddressSerializer, OrderBankAccountSerializer, \
OrderItemSerializer, OrderSerializer, ShippingAddressSerializer
from orders.models import BillingAddress, Order, OrderBankAccount, OrderItem, ShippingAddress


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



class ShippingAddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet):
queryset = ShippingAddress.objects.all()
serializer_class = ShippingAddressSerializer
filterset_class = ShippingAddressFilter



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



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



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