Files
FullMoonBakehouse-archive-2025/api/apps/commerce/views.py
2025-11-09 00:26:00 -06:00

83 lines
3.1 KiB
Python

from rest_framework import mixins, permissions, viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from . import models, serializers
class ProductPublicViewSet(viewsets.ReadOnlyModelViewSet):
"""Public storefront products."""
queryset = models.Product.objects.filter(is_active=True).select_related("category")
serializer_class = serializers.ProductSerializer
permission_classes = [permissions.AllowAny]
lookup_field = "slug"
class ProductAdminViewSet(viewsets.ModelViewSet):
queryset = models.Product.objects.select_related("category").all()
serializer_class = serializers.ProductSerializer
permission_classes = [permissions.IsAuthenticated]
class ProductCategoryPublicViewSet(viewsets.ReadOnlyModelViewSet):
queryset = models.ProductCategory.objects.filter(is_active=True)
serializer_class = serializers.ProductCategorySerializer
permission_classes = [permissions.AllowAny]
lookup_field = "slug"
class ProductCategoryAdminViewSet(viewsets.ModelViewSet):
queryset = models.ProductCategory.objects.all()
serializer_class = serializers.ProductCategorySerializer
permission_classes = [permissions.IsAuthenticated]
class DeliveryZonePublicViewSet(viewsets.ReadOnlyModelViewSet):
queryset = models.DeliveryZone.objects.filter(is_active=True)
serializer_class = serializers.DeliveryZoneSerializer
permission_classes = [permissions.AllowAny]
class DeliveryZoneAdminViewSet(viewsets.ModelViewSet):
queryset = models.DeliveryZone.objects.all()
serializer_class = serializers.DeliveryZoneSerializer
permission_classes = [permissions.IsAuthenticated]
class DeliveryOverrideCodeAdminViewSet(viewsets.ModelViewSet):
queryset = models.DeliveryOverrideCode.objects.all()
serializer_class = serializers.DeliveryOverrideCodeSerializer
permission_classes = [permissions.IsAuthenticated]
lookup_field = "code"
@action(methods=["post"], detail=True, permission_classes=[permissions.IsAuthenticated])
def activate(self, request, code=None):
override_code = self.get_object()
override_code.is_active = True
override_code.save(update_fields=["is_active"])
return Response(self.get_serializer(override_code).data)
@action(methods=["post"], detail=True, permission_classes=[permissions.IsAuthenticated])
def deactivate(self, request, code=None):
override_code = self.get_object()
override_code.is_active = False
override_code.save(update_fields=["is_active"])
return Response(self.get_serializer(override_code).data)
class OrderPublicViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
queryset = models.Order.objects.all()
serializer_class = serializers.OrderSerializer
permission_classes = [permissions.AllowAny]
class OrderAdminViewSet(viewsets.ModelViewSet):
queryset = (
models.Order.objects.select_related("delivery_override_code")
.prefetch_related("items")
.all()
)
serializer_class = serializers.OrderAdminSerializer
permission_classes = [permissions.IsAuthenticated]