from rest_framework import serializers from .models import ApiCategory, ApiItem, ApiFavorite class ApiCategorySerializer(serializers.ModelSerializer): item_count = serializers.SerializerMethodField() class Meta: model = ApiCategory fields = ['id', 'name', 'icon', 'sort_order', 'item_count', 'created_at'] read_only_fields = ['id', 'created_at'] def get_item_count(self, obj): return obj.items.filter(is_enabled=True).count() class ApiItemSerializer(serializers.ModelSerializer): category_name = serializers.CharField(source='category.name', read_only=True, default='') favorites_count = serializers.SerializerMethodField() is_favorited = serializers.SerializerMethodField() class Meta: model = ApiItem fields = [ 'id', 'name', 'description', 'icon', 'url_path', 'method', 'category', 'category_name', 'is_enabled', 'is_new', 'is_coming_soon', 'views_count', 'color', 'image_url', 'sort_order', 'created_at', 'updated_at', 'favorites_count', 'is_favorited' ] read_only_fields = ['id', 'created_at', 'updated_at'] def get_favorites_count(self, obj): return obj.favorites.count() def get_is_favorited(self, obj): request = self.context.get('request') if request and request.user.is_authenticated: return obj.favorites.filter(user=request.user).exists() return False class ApiFavoriteSerializer(serializers.ModelSerializer): api_item_name = serializers.CharField(source='api_item.name', read_only=True) api_item_url = serializers.CharField(source='api_item.url_path', read_only=True) class Meta: model = ApiFavorite fields = ['id', 'user', 'api_item', 'api_item_name', 'api_item_url', 'created_at'] read_only_fields = ['id', 'created_at']