diff --git a/ecommerce/baskets/filters.py b/ecommerce/baskets/filters.py new file mode 100644 index 0000000..35f2812 --- /dev/null +++ b/ecommerce/baskets/filters.py @@ -0,0 +1,24 @@ +from django.utils.translation import gettext_lazy as _ +from django_filters import rest_framework as filters + +from baskets.models import Basket, BasketItem + + +class BasketFilter(filters.FilterSet): + """ + Basket Models Filter + """ + + class Meta: + model = Basket + fields = ("customer", "status") + + +class BasketItemFilter(filters.FilterSet): + """ + BasketItem Models Filter + """ + + class Meta: + model = BasketItem + fields = ("basket", "product", "quantity", "price") diff --git a/ecommerce/baskets/serializers.py b/ecommerce/baskets/serializers.py new file mode 100644 index 0000000..ed2a42b --- /dev/null +++ b/ecommerce/baskets/serializers.py @@ -0,0 +1,30 @@ +from rest_framework import serializers + +from products.serializers import ProductSerializer +from customers.serializers import CustomerSerializer +from baskets.models import BasketItem, Basket + + +class BasketSerializer(serializers.ModelSerializer): + + class Meta: + model = Basket + fields = ("id", "customer", "status") + + +class BasketDetailedSerializer(BasketSerializer): + customer = CustomerSerializer() + + +class BasketItemSerializer(serializers.ModelSerializer): + + class Meta: + model = BasketItem + fields = ("id", "basket", "product", "quantity", "price",) + + +class BasketItemDetailedSerializer(BasketItemSerializer): + basket = BasketSerializer() + product = ProductSerializer() + + diff --git a/ecommerce/baskets/views.py b/ecommerce/baskets/views.py index 91ea44a..5e2d4b8 100644 --- a/ecommerce/baskets/views.py +++ b/ecommerce/baskets/views.py @@ -1,3 +1,28 @@ from django.shortcuts import render +from rest_framework import viewsets # Create your views here. +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 + + +class BasketViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = Basket.objects.all() + serializer_class = BasketSerializer + filterset_class = BasketFilter + serializer_action_classes = { + "detailed_list": BasketDetailedSerializer, + "detail": BasketDetailedSerializer, + } + + +class BasketItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = BasketItem.objects.all() + serializer_class = BasketItemSerializer + filterset_class = BasketItemFilter + serializer_action_classes = { + "detailed_list": BasketItemDetailedSerializer, + "detail": BasketItemDetailedSerializer, + } \ No newline at end of file diff --git a/ecommerce/customers/filters.py b/ecommerce/customers/filters.py new file mode 100644 index 0000000..e40f0cd --- /dev/null +++ b/ecommerce/customers/filters.py @@ -0,0 +1,34 @@ +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): + + class Meta: + model = Customer + fields = ("first_name", "last_name", "email") + + +class CityFilter(filters.FilterSet): + + class Meta: + model = City + fields = ("name", "country") + + +class CountryFilter(filters.FilterSet): + + class Meta: + model = Country + fields = ("name",) + + +class AddressFilter(filters.FilterSet): + + 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..103f015 --- /dev/null +++ b/ecommerce/customers/serializers.py @@ -0,0 +1,44 @@ +from rest_framework import serializers +from core.mixins import DetailedViewSetMixin + +from customers.models import Customer, Address, City, Country + + +class CustomerSerializer(serializers.ModelSerializer): + + class Meta: + model = Customer + fields = ("id", "first_name", "last_name", "email") + + +class CountrySerializer(serializers.ModelSerializer): + class Meta: + model = Country + fields = ("id", "name",) + + +class CitySerializer(serializers.ModelSerializer): + + class Meta: + model = City + fields = ("id", "name", "country") + + +class AddressSerializer(serializers.ModelSerializer): + + class Meta: + model = Address + fields = ("id", "name", "full_name", "phone", "district", "zipcode", "city", "customer") + + +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..d125536 100644 --- a/ecommerce/customers/views.py +++ b/ecommerce/customers/views.py @@ -1,3 +1,43 @@ from django.shortcuts import render # Create your views here. +from rest_framework import viewsets +from core.mixins import DetailedViewSetMixin + +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 + + +class CustomerViewSet(viewsets.ModelViewSet): + queryset = Customer.objects.all() + serializer_class = CustomerSerializer + filterset_class = CustomerFilter + + +class CountryViewSet(viewsets.ModelViewSet): + queryset = Country.objects.all() + serializer_class = CountrySerializer + filterset_class = CountryFilter + + +class CityViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = City.objects.select_related("country").all() + serializer_class = CitySerializer + filterset_class = CityFilter + serializer_action_classes = { + "detailed_list": CityDetailedSerializer, + "detail": CityDetailedSerializer, + } + + +class AddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = Address.objects.all() + serializer_class = AddressSerializer + filterset_class = AddressFilter + serializer_action_classes = { + "detailed_list": AddressDetailedSerializer, + "detail": AddressDetailedSerializer, + } + + diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index 3d9479a..503aa8c 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -17,8 +17,27 @@ from django.urls import path, include from ecommerce.router import router + +from products.views import ProductViewSet, CategoryViewSet +from baskets.views import BasketItemViewSet, BasketViewSet +from customers.views import CustomerViewSet, AddressViewSet, CityViewSet, CountryViewSet +from orders.views import OrderItemViewSet, OrderViewSet, BillingAddressViewSet, ShippingAddressViewSet, OrderBankAccountViewSet +from payments.views import BankAccountViewSet, BankViewSet from products.views import ProductViewSet, CategoryViewSet +router.register("customers", CustomerViewSet) +router.register("addresses", AddressViewSet) +router.register("cities", CityViewSet) +router.register("countries", CountryViewSet) +router.register("order-items", OrderItemViewSet) +router.register("orders", OrderViewSet) +router.register("order-bank-accounts", OrderBankAccountViewSet) +router.register("banks", BankViewSet) +router.register("bank-accounts", BankAccountViewSet) +router.register("billing-addresses", BillingAddressViewSet) +router.register("shipping-addresses", ShippingAddressViewSet) +router.register("basket-items", BasketItemViewSet) +router.register("baskets", BasketViewSet) router.register("products", ProductViewSet) router.register("categories", CategoryViewSet) diff --git a/ecommerce/orders/filters.py b/ecommerce/orders/filters.py new file mode 100644 index 0000000..0e0ce20 --- /dev/null +++ b/ecommerce/orders/filters.py @@ -0,0 +1,47 @@ +from django.utils.translation import gettext_lazy as _ +from django_filters import rest_framework as filters + +from orders import enums +from orders.models import OrderItem, Order, OrderBankAccount, ShippingAddress, BillingAddress + +from customers.filters import CityFilter, CustomerFilter +from baskets.filters import BasketFilter + + +class BillingAddressFilter(filters.FilterSet): + + class Meta: + model = BillingAddress + fields = ("full_name", "city") + + +class ShippingAddressFilter(filters.FilterSet): + + class Meta: + model = ShippingAddress + fields = ("full_name", "city") + + +class OrderFilter(filters.FilterSet): + + class Meta: + model = Order + fields = ("customer", "basket", "status") + + +class OrderItemFilter(filters.FilterSet): + + class Meta: + model = OrderItem + fields = ("order", "product") + + +class OrderBankAccountFilter(filters.FilterSet): + + class Meta: + model = OrderBankAccount + fields = ("name", "iban", "bank_name", "order") + + + + diff --git a/ecommerce/orders/serializers.py b/ecommerce/orders/serializers.py new file mode 100644 index 0000000..360881c --- /dev/null +++ b/ecommerce/orders/serializers.py @@ -0,0 +1,61 @@ +from rest_framework import serializers + +from orders.models import Order, OrderItem, BillingAddress, ShippingAddress, OrderBankAccount +from customers.serializers import CustomerSerializer, CitySerializer +from baskets.serializers import BasketSerializer + + +class BillingAddressSerializer(serializers.ModelSerializer): + + class Meta: + model = BillingAddress + fields = ("id", "full_name", "line_1", "line_2", "phone", "district", "zipcode", "city") + + +class ShippingAddressSerializer(serializers.ModelSerializer): + + class Meta: + model = ShippingAddress + fields = ("id", "full_name", "line_1", "line_2", "phone", "district", "zipcode", "city") + + +class OrderBankAccountSerializer(serializers.ModelSerializer): + + class Meta: + model = OrderBankAccount + fields = ("id", "name", "iban", "bank_name", "order") + + +class OrderSerializer(serializers.ModelSerializer): + + class Meta: + model = Order + fields = ("id", "customer", "basket", "status", "total_price") + + +class OrderItemSerializer(serializers.ModelSerializer): + + class Meta: + model = OrderItem + fields = ("id", "order", "product", "price", ) + + +class BillingAddressDetailedSerializer(BillingAddressSerializer): + city = CitySerializer() + + +class ShippingAddressDetailedSerializer(ShippingAddressSerializer): + city = CitySerializer() + + +class OrderBankAccountDetailedSerializer(OrderBankAccountSerializer): + order = OrderSerializer() + + +class OrderDetailedSerializer(OrderSerializer): + basket = BasketSerializer() + customer = CustomerSerializer() + + +class OrderItemDetailedSerializer(OrderItemSerializer): + order = OrderSerializer() diff --git a/ecommerce/orders/views.py b/ecommerce/orders/views.py index 91ea44a..8b5d6ca 100644 --- a/ecommerce/orders/views.py +++ b/ecommerce/orders/views.py @@ -1,3 +1,65 @@ from django.shortcuts import render +from rest_framework import viewsets # Create your views here. +from core.mixins import DetailedViewSetMixin + +from orders.filters import BillingAddressFilter, ShippingAddressFilter, OrderFilter, OrderItemFilter, OrderBankAccountFilter +from orders.models import BillingAddress, Order, ShippingAddress, OrderItem, OrderBankAccount +from orders.serializers import OrderSerializer, BillingAddressSerializer, \ + ShippingAddressSerializer, OrderDetailedSerializer, \ + BillingAddressDetailedSerializer, ShippingAddressDetailedSerializer, \ + OrderItemSerializer, OrderItemDetailedSerializer, \ + OrderBankAccountSerializer, OrderBankAccountDetailedSerializer + + + +class ShippingAddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = ShippingAddress.objects.all() + serializer_class = ShippingAddressSerializer + filterset_class = ShippingAddressFilter + serializer_action_classes = { + "detailed_list": ShippingAddressDetailedSerializer, + "detailed": ShippingAddressDetailedSerializer, + } + + +class BillingAddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = BillingAddress.objects.all() + serializer_class = BillingAddressSerializer + filterset_class = BillingAddressFilter + serializer_action_classes = { + "detailed_list": BillingAddressDetailedSerializer, + "detailed": BillingAddressDetailedSerializer, + } + + +class OrderViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = Order.objects.all() + serializer_class = OrderSerializer + filterset_class = OrderFilter + serializer_action_classes = { + "detailed_list": OrderDetailedSerializer, + "detailed": OrderDetailedSerializer, + } + + +class OrderBankAccountViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = OrderBankAccount.objects.all() + serializer_class = OrderBankAccountSerializer + filterset_class = OrderBankAccountFilter + serializer_action_classes = { + "detailed_list": OrderBankAccountDetailedSerializer, + "detailed": OrderBankAccountDetailedSerializer, + } + + +class OrderItemViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = OrderItem.objects.all() + serializer_class = OrderItemSerializer + filterset_class = OrderItemFilter + serializer_action_classes = { + "detailed_list": OrderItemDetailedSerializer, + "detailed": OrderItemDetailedSerializer, + } + diff --git a/ecommerce/payments/filters.py b/ecommerce/payments/filters.py new file mode 100644 index 0000000..a53faa9 --- /dev/null +++ b/ecommerce/payments/filters.py @@ -0,0 +1,19 @@ +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): + + class Meta: + model = Bank + fields = ("name", ) + + +class BankAccountFilter(filters.FilterSet): + + class Meta: + model = BankAccount + fields = ("name", ) + diff --git a/ecommerce/payments/serializers.py b/ecommerce/payments/serializers.py new file mode 100644 index 0000000..bdcf9bc --- /dev/null +++ b/ecommerce/payments/serializers.py @@ -0,0 +1,21 @@ +from rest_framework import serializers + +from payments.models import BankAccount, Bank + + +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..460541c 100644 --- a/ecommerce/payments/views.py +++ b/ecommerce/payments/views.py @@ -1,3 +1,26 @@ from django.shortcuts import render +from rest_framework import viewsets # Create your views here. +from core.mixins import DetailedViewSetMixin + +from payments.models import Bank, BankAccount +from payments.filters import BankFilter, BankAccountFilter +from payments.serializers import BankSerializer, BankAccountSerializer, BankAccountDetailedSerializer + + +class BankViewSet(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, + } +