From cc241f1a51ec9ff81f24aa4240886efa84bbc04a Mon Sep 17 00:00:00 2001 From: Melih Date: Thu, 9 Dec 2021 23:02:24 +0300 Subject: [PATCH 01/10] env values added --- ecommerce/.env.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecommerce/.env.dist b/ecommerce/.env.dist index b7f48c2..3d140c0 100644 --- a/ecommerce/.env.dist +++ b/ecommerce/.env.dist @@ -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://bootcamp:1993@s127.0.0.1:5432/bootcampecommerce ALLOWED_HOSTS=127.0.0.1,0.0.0.0 TIME_ZONE=Europe/Istanbul \ No newline at end of file From 6127e8058751c91f4f14b62b8a73375289ed90c3 Mon Sep 17 00:00:00 2001 From: Melih Date: Sat, 11 Dec 2021 23:03:00 +0300 Subject: [PATCH 02/10] url modified --- ecommerce/ecommerce/urls.py | 2 +- ecommerce/products/serializers.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index 3d9479a..e9a9e3c 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -24,5 +24,5 @@ urlpatterns = [ path("api/", include(router.urls)), - path('admin/', admin.site.urls), + path('', admin.site.urls), ] diff --git a/ecommerce/products/serializers.py b/ecommerce/products/serializers.py index a7eb006..dddd238 100644 --- a/ecommerce/products/serializers.py +++ b/ecommerce/products/serializers.py @@ -38,3 +38,5 @@ def create(self, validated_data): + + From 26fcaa09f5d8d5e1c5a052df5a354e031b5606ed Mon Sep 17 00:00:00 2001 From: Melih Date: Sat, 11 Dec 2021 23:45:26 +0300 Subject: [PATCH 03/10] .env.dist updated --- ecommerce/.env.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecommerce/.env.dist b/ecommerce/.env.dist index 3d140c0..87200fc 100644 --- a/ecommerce/.env.dist +++ b/ecommerce/.env.dist @@ -1,5 +1,5 @@ DEBUG=True SECRET_KEY=secret_key -DATABASE_URL=psql://bootcamp:1993@s127.0.0.1:5432/bootcampecommerce +DATABASE_URL=psql://username:password@ipaddress:port/db_name ALLOWED_HOSTS=127.0.0.1,0.0.0.0 TIME_ZONE=Europe/Istanbul \ No newline at end of file From fec9c90df355e992f310779373138786e6a135cc Mon Sep 17 00:00:00 2001 From: Melih Date: Sun, 12 Dec 2021 01:35:11 +0300 Subject: [PATCH 04/10] serializers.py and filters.py created, views.py and urls.py modified accordingly. --- ecommerce/baskets/filters.py | 20 ++++++++++++++++++++ ecommerce/baskets/models.py | 2 ++ ecommerce/baskets/serializers.py | 16 ++++++++++++++++ ecommerce/baskets/views.py | 20 ++++++++++++++++++-- ecommerce/ecommerce/urls.py | 3 +++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 ecommerce/baskets/filters.py create mode 100644 ecommerce/baskets/serializers.py diff --git a/ecommerce/baskets/filters.py b/ecommerce/baskets/filters.py new file mode 100644 index 0000000..e737e28 --- /dev/null +++ b/ecommerce/baskets/filters.py @@ -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") diff --git a/ecommerce/baskets/models.py b/ecommerce/baskets/models.py index 4f109d5..ca4e695 100644 --- a/ecommerce/baskets/models.py +++ b/ecommerce/baskets/models.py @@ -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") diff --git a/ecommerce/baskets/serializers.py b/ecommerce/baskets/serializers.py new file mode 100644 index 0000000..ae551c2 --- /dev/null +++ b/ecommerce/baskets/serializers.py @@ -0,0 +1,16 @@ +from rest_framework import serializers +from baskets.models import Basket, BasketItem + + +class BasketSerializers(serializers.ModelSerializer): + + class Meta: + model = Basket + fields = "__all__" + + +class BasketItemSerializers(serializers.ModelSerializer): + + class Meta: + model = BasketItem + fields = "__all__" diff --git a/ecommerce/baskets/views.py b/ecommerce/baskets/views.py index 91ea44a..de526fa 100644 --- a/ecommerce/baskets/views.py +++ b/ecommerce/baskets/views.py @@ -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 \ No newline at end of file diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index e9a9e3c..262fc23 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -16,11 +16,14 @@ 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 router.register("products", ProductViewSet) router.register("categories", CategoryViewSet) +router.register("baskets", BasketViewSet) +router.register("basket-items",BasketItemViewSet) urlpatterns = [ path("api/", include(router.urls)), From 015a66c34a55fa851d95042b2013a8a6bf75dece Mon Sep 17 00:00:00 2001 From: Melih Date: Sun, 12 Dec 2021 01:36:19 +0300 Subject: [PATCH 05/10] Revert "serializers.py and filters.py created, views.py and urls.py modified accordingly." This reverts commit fec9c90df355e992f310779373138786e6a135cc. --- ecommerce/baskets/filters.py | 20 -------------------- ecommerce/baskets/models.py | 2 -- ecommerce/baskets/serializers.py | 16 ---------------- ecommerce/baskets/views.py | 20 ++------------------ ecommerce/ecommerce/urls.py | 3 --- 5 files changed, 2 insertions(+), 59 deletions(-) delete mode 100644 ecommerce/baskets/filters.py delete mode 100644 ecommerce/baskets/serializers.py diff --git a/ecommerce/baskets/filters.py b/ecommerce/baskets/filters.py deleted file mode 100644 index e737e28..0000000 --- a/ecommerce/baskets/filters.py +++ /dev/null @@ -1,20 +0,0 @@ -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") diff --git a/ecommerce/baskets/models.py b/ecommerce/baskets/models.py index ca4e695..4f109d5 100644 --- a/ecommerce/baskets/models.py +++ b/ecommerce/baskets/models.py @@ -16,8 +16,6 @@ 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") diff --git a/ecommerce/baskets/serializers.py b/ecommerce/baskets/serializers.py deleted file mode 100644 index ae551c2..0000000 --- a/ecommerce/baskets/serializers.py +++ /dev/null @@ -1,16 +0,0 @@ -from rest_framework import serializers -from baskets.models import Basket, BasketItem - - -class BasketSerializers(serializers.ModelSerializer): - - class Meta: - model = Basket - fields = "__all__" - - -class BasketItemSerializers(serializers.ModelSerializer): - - class Meta: - model = BasketItem - fields = "__all__" diff --git a/ecommerce/baskets/views.py b/ecommerce/baskets/views.py index de526fa..91ea44a 100644 --- a/ecommerce/baskets/views.py +++ b/ecommerce/baskets/views.py @@ -1,19 +1,3 @@ -from rest_framework import viewsets +from django.shortcuts import render -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 \ No newline at end of file +# Create your views here. diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index 262fc23..e9a9e3c 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -16,14 +16,11 @@ 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 router.register("products", ProductViewSet) router.register("categories", CategoryViewSet) -router.register("baskets", BasketViewSet) -router.register("basket-items",BasketItemViewSet) urlpatterns = [ path("api/", include(router.urls)), From 06531405afcb1f96a18c22852dd6098ea70a4e91 Mon Sep 17 00:00:00 2001 From: Melih Date: Sun, 12 Dec 2021 01:35:11 +0300 Subject: [PATCH 06/10] serializers.py and filters.py created, views.py and urls.py modified accordingly. (cherry picked from commit fec9c90df355e992f310779373138786e6a135cc) --- ecommerce/baskets/filters.py | 20 ++++++++++++++++++++ ecommerce/baskets/models.py | 2 ++ ecommerce/baskets/serializers.py | 16 ++++++++++++++++ ecommerce/baskets/views.py | 20 ++++++++++++++++++-- ecommerce/ecommerce/urls.py | 3 +++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 ecommerce/baskets/filters.py create mode 100644 ecommerce/baskets/serializers.py diff --git a/ecommerce/baskets/filters.py b/ecommerce/baskets/filters.py new file mode 100644 index 0000000..e737e28 --- /dev/null +++ b/ecommerce/baskets/filters.py @@ -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") diff --git a/ecommerce/baskets/models.py b/ecommerce/baskets/models.py index 4f109d5..ca4e695 100644 --- a/ecommerce/baskets/models.py +++ b/ecommerce/baskets/models.py @@ -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") diff --git a/ecommerce/baskets/serializers.py b/ecommerce/baskets/serializers.py new file mode 100644 index 0000000..ae551c2 --- /dev/null +++ b/ecommerce/baskets/serializers.py @@ -0,0 +1,16 @@ +from rest_framework import serializers +from baskets.models import Basket, BasketItem + + +class BasketSerializers(serializers.ModelSerializer): + + class Meta: + model = Basket + fields = "__all__" + + +class BasketItemSerializers(serializers.ModelSerializer): + + class Meta: + model = BasketItem + fields = "__all__" diff --git a/ecommerce/baskets/views.py b/ecommerce/baskets/views.py index 91ea44a..de526fa 100644 --- a/ecommerce/baskets/views.py +++ b/ecommerce/baskets/views.py @@ -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 \ No newline at end of file diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index e9a9e3c..262fc23 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -16,11 +16,14 @@ 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 router.register("products", ProductViewSet) router.register("categories", CategoryViewSet) +router.register("baskets", BasketViewSet) +router.register("basket-items",BasketItemViewSet) urlpatterns = [ path("api/", include(router.urls)), From 86a55b34aec05c3326ee0778d344fcf66036ca42 Mon Sep 17 00:00:00 2001 From: Melih Date: Sun, 12 Dec 2021 03:16:40 +0300 Subject: [PATCH 07/10] filters.py and serializers.py created, views.py and urls.py modified accordingly in customers app --- ecommerce/customers/filters.py | 42 ++++++++++++++++++++++++++++++ ecommerce/customers/serializers.py | 39 +++++++++++++++++++++++++++ ecommerce/customers/views.py | 39 +++++++++++++++++++++++++-- ecommerce/ecommerce/urls.py | 9 ++++++- 4 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 ecommerce/customers/filters.py create mode 100644 ecommerce/customers/serializers.py diff --git a/ecommerce/customers/filters.py b/ecommerce/customers/filters.py new file mode 100644 index 0000000..60cc376 --- /dev/null +++ b/ecommerce/customers/filters.py @@ -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") diff --git a/ecommerce/customers/serializers.py b/ecommerce/customers/serializers.py new file mode 100644 index 0000000..78f91b9 --- /dev/null +++ b/ecommerce/customers/serializers.py @@ -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() + + diff --git a/ecommerce/customers/views.py b/ecommerce/customers/views.py index 91ea44a..6772c09 100644 --- a/ecommerce/customers/views.py +++ b/ecommerce/customers/views.py @@ -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 + } \ No newline at end of file diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index 262fc23..bc8d457 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -19,11 +19,18 @@ 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 router.register("products", ProductViewSet) router.register("categories", CategoryViewSet) router.register("baskets", BasketViewSet) -router.register("basket-items",BasketItemViewSet) +router.register("basket-items", BasketItemViewSet) +router.register("customers", CustomerViewSet) +router.register("cities", CityViewSet) +router.register("countries", CountryViewSet) +router.register("addresses", AddressViewSet) + + urlpatterns = [ path("api/", include(router.urls)), From 4f2c4a1063518d6dac8ef70e0194c4de7c328178 Mon Sep 17 00:00:00 2001 From: Melih Date: Sun, 12 Dec 2021 03:34:25 +0300 Subject: [PATCH 08/10] filters.py and serializers.py created, views.py and urls.py modified accordingly in orders app --- ecommerce/ecommerce/urls.py | 8 +++++ ecommerce/orders/filters.py | 57 +++++++++++++++++++++++++++++++++ ecommerce/orders/serializers.py | 35 ++++++++++++++++++++ ecommerce/orders/views.py | 43 +++++++++++++++++++++++-- 4 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 ecommerce/orders/filters.py create mode 100644 ecommerce/orders/serializers.py diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index bc8d457..fd3fcd4 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -20,6 +20,9 @@ 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 + router.register("products", ProductViewSet) router.register("categories", CategoryViewSet) @@ -29,6 +32,11 @@ 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) diff --git a/ecommerce/orders/filters.py b/ecommerce/orders/filters.py new file mode 100644 index 0000000..2bfa2b7 --- /dev/null +++ b/ecommerce/orders/filters.py @@ -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",) \ No newline at end of file diff --git a/ecommerce/orders/serializers.py b/ecommerce/orders/serializers.py new file mode 100644 index 0000000..476a33e --- /dev/null +++ b/ecommerce/orders/serializers.py @@ -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__' \ No newline at end of file diff --git a/ecommerce/orders/views.py b/ecommerce/orders/views.py index 91ea44a..8769802 100644 --- a/ecommerce/orders/views.py +++ b/ecommerce/orders/views.py @@ -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 From db0e2ee23d02c9403514ce4c15d698f29b24a6c2 Mon Sep 17 00:00:00 2001 From: Melih Date: Sun, 12 Dec 2021 04:05:56 +0300 Subject: [PATCH 09/10] filters.py and serializers.py created, views.py and urls.py modified accordingly in payments app --- ecommerce/ecommerce/urls.py | 8 ++++++-- ecommerce/payments/filters.py | 22 ++++++++++++++++++++++ ecommerce/payments/serializers.py | 21 +++++++++++++++++++++ ecommerce/payments/views.py | 23 +++++++++++++++++++++-- 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 ecommerce/payments/filters.py create mode 100644 ecommerce/payments/serializers.py diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index fd3fcd4..a2955c5 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -22,23 +22,27 @@ 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)), diff --git a/ecommerce/payments/filters.py b/ecommerce/payments/filters.py new file mode 100644 index 0000000..d193c8e --- /dev/null +++ b/ecommerce/payments/filters.py @@ -0,0 +1,22 @@ +from django.utils.translation import gettext_lazy as _ +from django_filters import rest_framework as filters + +from payments.models import Bank, BankAccount + + +class BankFilter(filters.FilterSet): + name = filters.CharFilter(label=_("Bank Name"), lookup_expr="icontains") + + class Meta: + model = Bank + fields = ("name",) + + +class BankAccountFilter(filters.FilterSet): + name = filters.CharFilter(label=_("Bank Account Name"), lookup_expr="icontains") + iban = filters.CharFilter(label=_("Phone"), lookup_expr="iexact") + bank = BankFilter + + class Meta: + model = BankAccount + fields = ("name", "iban", "bank",) \ No newline at end of file diff --git a/ecommerce/payments/serializers.py b/ecommerce/payments/serializers.py new file mode 100644 index 0000000..2ecfa77 --- /dev/null +++ b/ecommerce/payments/serializers.py @@ -0,0 +1,21 @@ + +from rest_framework import serializers + +from payments.models import Bank, BankAccount + + +class BankSerializer(serializers.ModelSerializer): + class Meta: + model = Bank + fields = ("id", "name",) + + +class BankAccountSerializer(serializers.ModelSerializer): + class Meta: + model = BankAccount + fields = ("id", "bank", "name", "iban",) + + +class BankAccountDetailedSerializer(BankAccountSerializer): + bank = BankSerializer() + diff --git a/ecommerce/payments/views.py b/ecommerce/payments/views.py index 91ea44a..df77b09 100644 --- a/ecommerce/payments/views.py +++ b/ecommerce/payments/views.py @@ -1,3 +1,22 @@ -from django.shortcuts import render +from rest_framework import viewsets -# Create your views here. +from core.mixins import DetailedViewSetMixin +from payments.filters import BankFilter, BankAccountFilter +from payments.models import Bank, BankAccount +from payments.serializers import BankAccountSerializer, BankSerializer, BankAccountDetailedSerializer + + +class BankViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = Bank.objects.all() + serializer_class = BankSerializer + filterset_class = BankFilter + + +class BankAccountViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = BankAccount.objects.all() + serializer_class = BankAccountSerializer + filterset_class = BankAccountFilter + serializer_action_classes = { + "detailed_list": BankAccountDetailedSerializer, + "detailed": BankAccountDetailedSerializer, + } \ No newline at end of file From f3ee2316bd26f8c17dbf5824a204fa277098ae8b Mon Sep 17 00:00:00 2001 From: Melih Date: Sun, 12 Dec 2021 04:09:19 +0300 Subject: [PATCH 10/10] pagination added for enpoint output --- ecommerce/ecommerce/settings.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ecommerce/ecommerce/settings.py b/ecommerce/ecommerce/settings.py index 898a8ee..57e1e4e 100644 --- a/ecommerce/ecommerce/settings.py +++ b/ecommerce/ecommerce/settings.py @@ -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 = [