from typing import Union from sqlalchemy.ext.asyncio import AsyncSession from enums.base_marketplace import BaseMarketplace from marketplaces.ozon.core import OzonController from marketplaces.wildberries.core import WildberriesController from marketplaces.yandex.core import YandexController from models import Marketplace class MarketplaceControllerFactory: @staticmethod def get_controller(session: AsyncSession, marketplace: Marketplace) -> Union[ WildberriesController, OzonController, YandexController ]: match marketplace.base_marketplace_key: case BaseMarketplace.WILDBERRIES: return WildberriesController(session, marketplace) case BaseMarketplace.OZON: return OzonController(session, marketplace) case BaseMarketplace.YANDEX_MARKET: return YandexController(session, marketplace) case _: raise ValueError(f"Unsupported marketplace: {marketplace.base_marketplace_key}")