Files
octopus/myproject/products/services/product_service.py
Andrey Smakotin 7ccdbbdfb5 Упрощение генерации SKU: удалён автоматический суффикс варианта
Удалена функция parse_variant_suffix и логика автоматического добавления
суффикса варианта к артикулу товара. SKU теперь всегда имеет формат
PROD-XXXXXX без дополнительных суффиксов.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:50:26 +03:00

62 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Сервисы для бизнес-логики Product модели.
Извлекает сложную логику из save() метода.
"""
class ProductSaveService:
"""
Сервис для обработки сохранения Product.
Генерирует SKU и поисковые ключевые слова.
"""
@staticmethod
def prepare_product_for_save(product):
"""
Подготавливает продукт к сохранению:
- Генерирует SKU если не задан
- Создает базовые поисковые ключевые слова
Args:
product (Product): Экземпляр продукта
Returns:
Product: Обновленный экземпляр продукта
"""
from ..utils.sku_generator import generate_product_sku
# Генерация артикула для новых товаров
if not product.sku:
product.sku = generate_product_sku(product)
# Автоматическая генерация ключевых слов для поиска
keywords_parts = [
product.name or '',
product.sku or '',
product.description or '',
]
if not product.search_keywords:
product.search_keywords = ' '.join(filter(None, keywords_parts))
return product
@staticmethod
def update_search_keywords_with_categories(product):
"""
Обновляет поисковые ключевые слова с названиями категорий.
Должен вызываться после сохранения, т.к. ManyToMany требует существующего объекта.
Args:
product (Product): Сохраненный экземпляр продукта
"""
# Добавляем названия категорий в search_keywords после сохранения
# (ManyToMany требует, чтобы объект уже существовал в БД)
if product.pk and product.categories.exists():
category_names = ' '.join([cat.name for cat in product.categories.all()])
if category_names and category_names not in product.search_keywords:
product.search_keywords = f"{product.search_keywords} {category_names}".strip()
# Используем update чтобы избежать рекурсии
from ..models.products import Product
Product.objects.filter(pk=product.pk).update(search_keywords=product.search_keywords)