from rest_framework import viewsets from rest_framework.permissions import AllowAny from drf_spectacular.utils import extend_schema, extend_schema_view from .models import Category, Product, ProductImage, DiscountCode, Order, OrderItem, Carrier from .serializers import ( CategorySerializer, ProductSerializer, ProductImageSerializer, DiscountCodeSerializer, OrderSerializer, ) @extend_schema_view( list=extend_schema(tags=["Commerce", "Categories"], summary="List categories"), retrieve=extend_schema(tags=["Commerce", "Categories"], summary="Retrieve category"), create=extend_schema(tags=["Commerce", "Categories"], summary="Create category"), update=extend_schema(tags=["Commerce", "Categories"], summary="Update category"), partial_update=extend_schema(tags=["Commerce", "Categories"], summary="Partial update category"), destroy=extend_schema(tags=["Commerce", "Categories"], summary="Delete category"), ) class CategoryViewSet(viewsets.ModelViewSet): queryset = Category.objects.all() serializer_class = CategorySerializer permission_classes = [AllowAny] @extend_schema_view( list=extend_schema(tags=["Commerce", "Products"], summary="List products"), retrieve=extend_schema(tags=["Commerce", "Products"], summary="Retrieve product"), create=extend_schema(tags=["Commerce", "Products"], summary="Create product"), update=extend_schema(tags=["Commerce", "Products"], summary="Update product"), partial_update=extend_schema(tags=["Commerce", "Products"], summary="Partial update product"), destroy=extend_schema(tags=["Commerce", "Products"], summary="Delete product"), ) class ProductViewSet(viewsets.ModelViewSet): queryset = Product.objects.all() serializer_class = ProductSerializer permission_classes = [AllowAny] @extend_schema_view( list=extend_schema(tags=["Commerce", "Discounts"], summary="List discount codes"), retrieve=extend_schema(tags=["Commerce", "Discounts"], summary="Retrieve discount code"), create=extend_schema(tags=["Commerce", "Discounts"], summary="Create discount code"), update=extend_schema(tags=["Commerce", "Discounts"], summary="Update discount code"), partial_update=extend_schema(tags=["Commerce", "Discounts"], summary="Partial update discount code"), destroy=extend_schema(tags=["Commerce", "Discounts"], summary="Delete discount code"), ) class DiscountCodeViewSet(viewsets.ModelViewSet): queryset = DiscountCode.objects.all() serializer_class = DiscountCodeSerializer permission_classes = [AllowAny] @extend_schema_view( list=extend_schema(tags=["Commerce", "Orders"], summary="List orders"), retrieve=extend_schema(tags=["Commerce", "Orders"], summary="Retrieve order"), create=extend_schema(tags=["Commerce", "Orders"], summary="Create order"), update=extend_schema(tags=["Commerce", "Orders"], summary="Update order"), partial_update=extend_schema(tags=["Commerce", "Orders"], summary="Partial update order"), destroy=extend_schema(tags=["Commerce", "Orders"], summary="Delete order"), ) class OrderViewSet(viewsets.ModelViewSet): queryset = Order.objects.all() serializer_class = OrderSerializer permission_classes = [AllowAny] # TODO: CarrierViewSet & CarrierSerializer when requested