diff --git a/ecommerce/README.md b/ecommerce/README.md index 83c3722..6ecfa21 100644 --- a/ecommerce/README.md +++ b/ecommerce/README.md @@ -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. \ No newline at end of file +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/" \ No newline at end of file diff --git a/ecommerce/baskets/filters.py b/ecommerce/baskets/filters.py new file mode 100644 index 0000000..fc33956 --- /dev/null +++ b/ecommerce/baskets/filters.py @@ -0,0 +1,15 @@ +from django_filters import rest_framework as filters + +from baskets.models import Basket, BasketItem + +#Basket Filter +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") diff --git a/ecommerce/baskets/serializers.py b/ecommerce/baskets/serializers.py new file mode 100644 index 0000000..d2c09d0 --- /dev/null +++ b/ecommerce/baskets/serializers.py @@ -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() + + +# 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() diff --git a/ecommerce/baskets/views.py b/ecommerce/baskets/views.py index 91ea44a..b3f3569 100644 --- a/ecommerce/baskets/views.py +++ b/ecommerce/baskets/views.py @@ -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, + } diff --git a/ecommerce/customers/filters.py b/ecommerce/customers/filters.py new file mode 100644 index 0000000..334b525 --- /dev/null +++ b/ecommerce/customers/filters.py @@ -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",) diff --git a/ecommerce/customers/serializers.py b/ecommerce/customers/serializers.py new file mode 100644 index 0000000..4b02fd3 --- /dev/null +++ b/ecommerce/customers/serializers.py @@ -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 diff --git a/ecommerce/customers/views.py b/ecommerce/customers/views.py index 91ea44a..e4e7cdd 100644 --- a/ecommerce/customers/views.py +++ b/ecommerce/customers/views.py @@ -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, + } diff --git a/ecommerce/ecommerce/settings.py b/ecommerce/ecommerce/settings.py index 898a8ee..c2b3538 100644 --- a/ecommerce/ecommerce/settings.py +++ b/ecommerce/ecommerce/settings.py @@ -32,7 +32,6 @@ ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[]) - # Application definition INSTALLED_APPS = [ @@ -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 = [ @@ -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 @@ -113,7 +112,6 @@ }, ] - # Internationalization # https://docs.djangoproject.com/en/3.2/topics/i18n/ @@ -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/ @@ -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/"),) diff --git a/ecommerce/ecommerce/urls.py b/ecommerce/ecommerce/urls.py index 3d9479a..d823baf 100644 --- a/ecommerce/ecommerce/urls.py +++ b/ecommerce/ecommerce/urls.py @@ -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)), diff --git a/ecommerce/orders/filter.py b/ecommerce/orders/filter.py new file mode 100644 index 0000000..7fbf3d2 --- /dev/null +++ b/ecommerce/orders/filter.py @@ -0,0 +1,74 @@ +from django.utils.translation import gettext_lazy as _ +from django_filters import rest_framework as filters + +from customers.filters import CityFilter +from orders.models import BillingAddress, ShippingAddress, Order, OrderItem, \ + OrderBankAccount + + +# Billing Address Filter +class BillingAddressFilter(filters.FilterSet): + full_name = filters.CharFilter(label=_("Full Name"), + lookup_expr="icontains") + phone = filters.CharFilter(label=_("Phone")) + line_1 = filters.CharFilter(label=_("Line 1"), lookup_expr="icontains") + line_2 = filters.CharFilter(label=_("Line 2"), lookup_expr="icontains") + district = filters.CharFilter(label=_("District"), lookup_expr="icontains") + zipcode = filters.CharFilter(label=_("Zipcode")) + city = CityFilter + + class Meta: + model = BillingAddress + fields = ( + "full_name", "line_1", "line_2", "phone", "district", "zipcode", "city") + + +# Shipping Address Filter +class ShippingAddressFilter(filters.FilterSet): + full_name = filters.CharFilter(label=_("Full Name"), + lookup_expr="icontains") + phone = filters.CharFilter(label=_("Phone")) + line_1 = filters.CharFilter(label=_("Line 1"), lookup_expr="icontains") + line_2 = filters.CharFilter(label=_("Line 2"), lookup_expr="icontains") + district = filters.CharFilter(label=_("District"), lookup_expr="icontains") + zipcode = filters.CharFilter(label=_("Zipcode")) + city = CityFilter + + class Meta: + model = ShippingAddress + fields = ( + "full_name", "line_1", "line_2", "phone", "district", "zipcode", "city") + + +# Order Filter +class OrderFilter(filters.FilterSet): + total_price = filters.NumberFilter(label=_("Total Price")) + + class Meta: + model = Order + fields = ( + "customer", "basket", "status", "billing_address", "shipping_address", + "total_price") + + +# Order Item Filter +class OrderItemFilter(filters.FilterSet): + product = filters.CharFilter(label=_("Product"), lookup_expr="icontains") + price = filters.NumberFilter() + + class Meta: + model = OrderItem + fields = ("order", "product", "price") + + +# Order Bank Account Filter +class OrderBankAccountFilter(filters.FilterSet): + name = filters.CharFilter(label=_("Order Bank Account Name"), + lookup_expr="icontains") + iban = filters.CharFilter(label=_("IBAN"), lookup_expr="exact") + bank_name = filters.CharFilter(label=_("Bank Name"), + lookup_expr="icontains") + + 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..8432d58 --- /dev/null +++ b/ecommerce/orders/serializers.py @@ -0,0 +1,66 @@ +from rest_framework import serializers + +from customers.serializers import CitySerializer, CustomerSerializer +from orders.models import ShippingAddress, BillingAddress, OrderBankAccount, Order, OrderItem + + +# Billing Address Serializer +class BillingAddressSerializer(serializers.ModelSerializer): + class Meta: + model = BillingAddress + fields = ('id', 'full_name', 'line_1', 'line_2', 'phone', 'district', 'zipcode', 'city') + + +# Shipping Address Serializer +class ShippingAddressSerializer(serializers.ModelSerializer): + class Meta: + model = ShippingAddress + fields = ('id', 'full_name', 'line_1', 'line_2', 'phone', 'district', 'zipcode', 'city') + + +# Order Bank Account Serializer +class OrderBankAccountSerializer(serializers.ModelSerializer): + class Meta: + model = OrderBankAccount + fields = ('id', 'name', 'iban', 'bank_name', 'order') + + +# Order Serializer +class OrderSerializer(serializers.ModelSerializer): + class Meta: + model = Order + fields = ('id', 'customer', 'basket', 'status', 'billing_address', 'shipping_address', 'total_price') + + +# Order Item Serializer +class OrderItemSerializer(serializers.ModelSerializer): + class Meta: + model = OrderItem + fields = ('id', 'order', 'product', 'price') + + +# Billing Address Detailed Serializer - nested serializer +class BillingAddressDetailedSerializer(BillingAddressSerializer): + cities = CitySerializer() + + +# Shipping Address Detailed Serializer - nested serializer +class ShippingAddressDetailedSerializer(ShippingAddressSerializer): + cities = CitySerializer() + + +# Order Bank Account Detailed Serializer - nested serializer +class OrderBankAccountDetailedSerializer(OrderBankAccountSerializer): + orders = OrderSerializer() + + +# Order Detailed Serializer - nested serializer +class OrderDetailedSerializer(OrderSerializer): + customers = CustomerSerializer() + billing_addresses = BillingAddressSerializer() + shipping_addresses = ShippingAddressSerializer() + + +# Order Item Detailed Serializer - nested serializer +class OrderItemDetailedSerializer(OrderItemSerializer): + orders = OrderSerializer() diff --git a/ecommerce/orders/views.py b/ecommerce/orders/views.py index 91ea44a..01ce3b1 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.filter import ShippingAddressFilter, BillingAddressFilter, OrderBankAccountFilter, OrderFilter, \ + OrderItemFilter +from orders.models import ShippingAddress, BillingAddress, OrderBankAccount, Order, OrderItem +from orders.serializers import ShippingAddressSerializer, BillingAddressSerializer, OrderBankAccountSerializer, \ + OrderSerializer, \ + OrderItemSerializer, ShippingAddressDetailedSerializer, BillingAddressDetailedSerializer, OrderDetailedSerializer, \ + OrderBankAccountDetailedSerializer, OrderItemDetailedSerializer + + +# Shipping Address ViewSet +class ShippingAddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = ShippingAddress.objects.all() + serializer_class = ShippingAddressSerializer + filterset_class = ShippingAddressFilter + serializer_action_classes = { + "detailed_list": ShippingAddressDetailedSerializer, + "detailed": ShippingAddressDetailedSerializer, + } + + +# Billing Address ViewSet +class BillingAddressViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = BillingAddress.objects.all() + serializer_class = BillingAddressSerializer + filterset_class = BillingAddressFilter + serializer_action_classes = { + "detailed_list": BillingAddressDetailedSerializer, + "detailed": BillingAddressDetailedSerializer, + } + + +# Order Bank Account ViewSet +class OrderBankAccountViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = OrderBankAccount.objects.all() + serializer_class = OrderBankAccountSerializer + filterset_class = OrderBankAccountFilter + serializer_action_classes = { + "detailed_list": OrderBankAccountDetailedSerializer, + "detailed": OrderBankAccountDetailedSerializer, + } + + +# Order ViewSet +class OrderViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = Order.objects.all() + serializer_class = OrderSerializer + filterset_class = OrderFilter + serializer_action_classes = { + "detailed_list": OrderDetailedSerializer, + "detailed": OrderDetailedSerializer, + } + + +# Order Item ViewSet +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..488c85e --- /dev/null +++ b/ecommerce/payments/filters.py @@ -0,0 +1,23 @@ +from django_filters import rest_framework as filters +from django.utils.translation import gettext_lazy as _ + +from payments.models import Bank, BankAccount + + +# Bank Filter +class BankFilter(filters.FilterSet): + name = filters.CharFilter(label=_("Bank Name"), lookup_expr="icontains") + + class Meta: + model = Bank + fields = ("name",) + + +# Bank Account Filter +class BankAccountFilter(filters.FilterSet): + bank = filters.CharFilter(label=_("Bank Name"), lookup_expr="icontains") + name = filters.CharFilter(label=_("Bank Account Name"), lookup_expr="icontains") + + class Meta: + model = BankAccount + fields = ("bank", "name", "iban") diff --git a/ecommerce/payments/serializers.py b/ecommerce/payments/serializers.py new file mode 100644 index 0000000..6f57273 --- /dev/null +++ b/ecommerce/payments/serializers.py @@ -0,0 +1,22 @@ +from rest_framework import serializers + +from payments.models import Bank, BankAccount + + +# Bank Serializer +class BankSerializer(serializers.ModelSerializer): + class Meta: + model = Bank + fields = ('id', 'name') + + +# Bank Account Serializer +class BankAccountSerializer(serializers.ModelSerializer): + class Meta: + model = BankAccount + fields = ('id', 'bank', 'name', 'iban') + + +# Bank Account Detailed Serializer - nested serializer +class BankAccountDetailedSerializer(BankAccountSerializer): + banks = BankSerializer() diff --git a/ecommerce/payments/views.py b/ecommerce/payments/views.py index 91ea44a..3b6d826 100644 --- a/ecommerce/payments/views.py +++ b/ecommerce/payments/views.py @@ -1,3 +1,23 @@ -from django.shortcuts import render +from rest_framework import viewsets -# Create your views here. +from payments.filters import BankFilter, BankAccountFilter +from payments.models import Bank, BankAccount +from payments.serializers import BankSerializer, BankAccountSerializer, BankAccountDetailedSerializer + + +# Bank ViewSet +class BankViewSet(viewsets.ModelViewSet): + queryset = Bank.objects.all() + serializer_class = BankSerializer + filterset_class = BankFilter + + +# Bank Account ViewSet +class BankAccountViewSet(viewsets.ModelViewSet): + queryset = BankAccount.objects.all() + serializer_class = BankAccountSerializer + filterset_class = BankAccountFilter + serializer_action_classes = { + "detailed_list": BankAccountDetailedSerializer, + "detailed": BankAccountDetailedSerializer, + } diff --git a/ecommerce/products/filters.py b/ecommerce/products/filters.py index 1ab7578..1395991 100644 --- a/ecommerce/products/filters.py +++ b/ecommerce/products/filters.py @@ -2,7 +2,7 @@ from django_filters import rest_framework as filters from django.utils.translation import gettext_lazy as _ -from products.models import Product +from products.models import Product, Category, Stock, Price class ProductFilter(filters.FilterSet): @@ -15,3 +15,29 @@ class Meta: def filter_name(self, qs, name, value): replaced_value = value.replace("Ş", "ş") return qs.filter(Q(name__icontains=replaced_value) | Q(name__icontains=value)) + + +class CategoryFilter(filters.FilterSet): + name = filters.CharFilter(label=_("Category"), lookup_expr="icontains") + + class Meta: + model = Category + fields = ("name",) + + +# Stock Filter +class StockFilter(filters.FilterSet): + quantity = filters.RangeFilter(label=_("Stock Quantity")) + + class Meta: + model = Stock + fields = ("product", "quantity") + + +# Price Filter +class PriceFilter(filters.FilterSet): + amount = filters.NumberFilter(label=_("Price Amount")) + + class Meta: + model = Price + fields = ("product", "amount") diff --git a/ecommerce/products/serializers.py b/ecommerce/products/serializers.py index a7eb006..5350983 100644 --- a/ecommerce/products/serializers.py +++ b/ecommerce/products/serializers.py @@ -1,21 +1,19 @@ from django.db.transaction import atomic from rest_framework import serializers -from products.models import Product, Category +from products.models import Product, Category, Stock, Price class ProductSerializer(serializers.ModelSerializer): - class Meta: model = Product fields = ("id", "sku", "name", "description", "color", "size", "categories", "created_at", "modified_at") class CategorySerializer(serializers.ModelSerializer): - class Meta: model = Category - fields = ("id", "name", ) + fields = ("id", "name",) class ProductDetailedSerializer(serializers.ModelSerializer): @@ -37,4 +35,25 @@ def create(self, validated_data): return product +# Stock Serializer +class StockSerializer(serializers.ModelSerializer): + class Meta: + model = Stock + fields = ('id', 'product', 'quantity') + + +# Stock Detailed Serializer - nested serializer +class StockDetailedSerializer(StockSerializer): + products = ProductSerializer() + + +# Price Serializer +class PriceSerializer(serializers.ModelSerializer): + class Meta: + model = Price + fields = ("product", "amount") + +# Price Detailed Serializer - nested serializer +class PriceDetailedSerializer(PriceSerializer): + products = ProductSerializer() diff --git a/ecommerce/products/views.py b/ecommerce/products/views.py index fdd33fd..b727f83 100644 --- a/ecommerce/products/views.py +++ b/ecommerce/products/views.py @@ -1,10 +1,10 @@ from rest_framework import viewsets from core.mixins import DetailedViewSetMixin -from products.filters import ProductFilter -from products.models import Product, Category +from products.filters import ProductFilter, CategoryFilter, StockFilter, PriceFilter +from products.models import Product, Category, Stock, Price from products.serializers import ProductSerializer, CategorySerializer, \ - ProductDetailedSerializer + ProductDetailedSerializer, StockSerializer, StockDetailedSerializer, PriceSerializer, PriceDetailedSerializer class ProductViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): @@ -20,3 +20,24 @@ class ProductViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): class CategoryViewSet(viewsets.ModelViewSet): queryset = Category.objects.all() serializer_class = CategorySerializer + filterset_class = CategoryFilter + +# Stock ViewSet +class StockViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = Stock.objects.all() + serializer_class = StockSerializer + filterset_class = StockFilter + serializer_action_classes = { + "detailed_list": StockDetailedSerializer, + "detailed": StockDetailedSerializer, + } + +# Price ViewSet +class PriceViewSet(DetailedViewSetMixin, viewsets.ModelViewSet): + queryset = Price.objects.all() + serializer_class = PriceSerializer + filterset_class = PriceFilter + serializer_action_classes = { + "detailed_list": PriceDetailedSerializer, + "detailed": PriceDetailedSerializer, + }