""" API представления для приложения products. """ from django.http import JsonResponse from django.db import models from ..models import Product, ProductVariantGroup def search_products_and_variants(request): """ API endpoint для поиска товаров и групп вариантов. Используется для автокомплита при добавлении компонентов в комплект. Параметры GET: - q: строка поиска - type: 'product' или 'variant' (опционально, если не указано - поиск по обоим) Возвращает JSON список: [ { "id": 1, "name": "Роза красная Freedom 50см", "sku": "PROD-000001", "type": "product", "price": "150.00" }, { "id": 1, "name": "Роза красная Freedom", "type": "variant", "count": 3 } ] """ query = request.GET.get('q', '').strip() search_type = request.GET.get('type', 'all') if not query or len(query) < 2: return JsonResponse({'results': []}) results = [] # Поиск товаров if search_type in ['all', 'product']: products = Product.objects.filter( models.Q(name__icontains=query) | models.Q(sku__icontains=query) | models.Q(description__icontains=query), is_active=True ).values('id', 'name', 'sku', 'sale_price')[:10] for product in products: results.append({ 'id': product['id'], 'name': f"{product['name']} ({product['sku']})", 'sku': product['sku'], 'type': 'product', 'price': str(product['sale_price']) }) # Поиск групп вариантов if search_type in ['all', 'variant']: variants = ProductVariantGroup.objects.filter( models.Q(name__icontains=query) | models.Q(description__icontains=query) ).prefetch_related('products')[:10] for variant in variants: count = variant.products.filter(is_active=True).count() results.append({ 'id': variant.id, 'name': f"{variant.name} ({count} вариантов)", 'type': 'variant', 'count': count }) return JsonResponse({'results': results})