# -*- coding: utf-8 -*- """ Сервис для работы с витринами. """ from inventory.models import Showcase, Warehouse from inventory.services.warehouse_service import WarehouseService class ShowcaseService: """Сервис управления витринами""" # Константы для витрины по умолчанию DEFAULT_NAME = 'Основная витрина' DEFAULT_DESCRIPTION = 'Витрина по умолчанию, созданная автоматически при регистрации' @classmethod def get_default(cls) -> Showcase | None: """ Получить витрину по умолчанию. Returns: Showcase или None если не найдена """ return Showcase.objects.filter(is_default=True, is_active=True).first() @classmethod def get_or_create_default(cls, warehouse: Warehouse = None) -> tuple[Showcase, bool]: """ Получить или создать витрину по умолчанию. Args: warehouse: Склад для витрины. Если не указан, используется склад по умолчанию. Returns: tuple (Showcase, created: bool) Raises: ValueError: если склад не найден и не может быть создан """ if warehouse is None: warehouse, _ = WarehouseService.get_or_create_default() return Showcase.objects.get_or_create( warehouse=warehouse, is_default=True, defaults={ 'name': cls.DEFAULT_NAME, 'description': cls.DEFAULT_DESCRIPTION, 'is_active': True, } ) @classmethod def reset_default(cls, warehouse: Warehouse = None) -> Showcase: """ Удалить и пересоздать витрину по умолчанию. Используется при --reset в init_tenant_data. Args: warehouse: Склад для витрины Returns: Новый Showcase """ if warehouse is None: warehouse, _ = WarehouseService.get_or_create_default() Showcase.objects.filter(warehouse=warehouse, is_default=True).delete() showcase, _ = cls.get_or_create_default(warehouse) return showcase