Add wishlist feature and admin/analytics endpoints
Introduces a Wishlist model with related serializers, admin, and API endpoints for users to manage favorite products. Adds admin endpoints for wishlist management and a placeholder AnalyticsViewSet for future business intelligence features. Refactors permissions for commerce views, updates product filtering and ordering, and improves carrier and payment logic. Also includes minor VSCode settings and Zasilkovna client import updates.
This commit is contained in:
@@ -87,6 +87,7 @@ from .models import (
|
||||
Payment,
|
||||
Cart,
|
||||
CartItem,
|
||||
Wishlist,
|
||||
)
|
||||
|
||||
from thirdparty.stripe.models import StripeModel
|
||||
@@ -523,4 +524,38 @@ class CartSerializer(serializers.ModelSerializer):
|
||||
return obj.get_total()
|
||||
|
||||
def get_items_count(self, obj):
|
||||
return obj.get_items_count()
|
||||
return obj.get_items_count()
|
||||
|
||||
|
||||
# ----------------- WISHLIST SERIALIZERS -----------------
|
||||
|
||||
class ProductMiniForWishlistSerializer(serializers.ModelSerializer):
|
||||
"""Minimal product info for wishlist display"""
|
||||
class Meta:
|
||||
model = Product
|
||||
fields = ['id', 'name', 'price', 'is_active', 'stock']
|
||||
|
||||
|
||||
class WishlistSerializer(serializers.ModelSerializer):
|
||||
products = ProductMiniForWishlistSerializer(many=True, read_only=True)
|
||||
products_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Wishlist
|
||||
fields = ['id', 'user', 'products', 'products_count', 'created_at', 'updated_at']
|
||||
read_only_fields = ['id', 'user', 'created_at', 'updated_at']
|
||||
|
||||
def get_products_count(self, obj):
|
||||
return obj.get_products_count()
|
||||
|
||||
|
||||
class WishlistProductActionSerializer(serializers.Serializer):
|
||||
"""For adding/removing products from wishlist"""
|
||||
product_id = serializers.IntegerField()
|
||||
|
||||
def validate_product_id(self, value):
|
||||
try:
|
||||
Product.objects.get(pk=value, is_active=True)
|
||||
except Product.DoesNotExist:
|
||||
raise serializers.ValidationError("Product not found or inactive.")
|
||||
return value
|
||||
Reference in New Issue
Block a user