from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.services import AuthService from dmp.adapters.db import ReportingDB, transactional from dmp.adapters.fivetran import FivetranClient from dmp.app_connections.enums import AppConnectionStatus from dmp.shopify.exceptions import ShopifyStoreNotFoundError from dmp.shopify.repositories import StoreAssociationRepository from dmp.shopify.services import StoreAssociationService @dataclass class RefreshStoreRequest: fivetran_connection_id: str @singleton class RefreshStoreHandler: def __init__( self, db: ReportingDB, auth_service: AuthService, fivetran_client: FivetranClient, store_association_repository: StoreAssociationRepository, store_association_service: StoreAssociationService, ) -> None: self.db = db self.auth_service = auth_service self.fivetran_client = fivetran_client self.store_association_repository = store_association_repository self.store_association_service = store_association_service @transactional def handle(self, request: RefreshStoreRequest) -> None: association = self.store_association_repository.get_by_fivetran_connection_id( fivetran_connection_id=request.fivetran_connection_id ) if not association or association.status == AppConnectionStatus.DELETED: raise ShopifyStoreNotFoundError association = self.store_association_service.refresh_store(association) self.store_association_repository.add(association) return None