from dataclasses import dataclass from enum import Enum from typing import Optional, Union from aiogram.types import Message from db.models import Category from db.models.products import Product class CatalogueType(Enum): CATEGORIES = "categories" PRODUCTS = "products" EMPTY = "empty" @dataclass class CatalogueView: view_type: Optional[CatalogueType] = None category: Optional[Category] = None children: Optional[list[Category]] = None products: Optional[list[Product]] = None page: int = 0 parent_id: Union[int, str, None] = None has_next: bool = False show_menu: bool = False @dataclass class NewCatalogueElement: msg: Message parent_id: Union[int, str] @dataclass class NewCategoryContext(NewCatalogueElement): ... @dataclass class NewProductContext(NewCatalogueElement): ...