from anydi import singleton from dmp.adapters.fivetran import FivetranClient from dmp.app_connections.enums import AppConnectionStatus from dmp.shopify.exceptions import ShopifyStoreNotFoundError from dmp.shopify.models import ShopifyStoreAssociation from dmp.shopify.repositories import StoreAssociationRepository @singleton class StoreAssociationService: def __init__( self, store_association_repository: StoreAssociationRepository, fivetran_client: FivetranClient, ) -> None: self.store_association_repository = store_association_repository self.fivetran_client = fivetran_client def get_store(self, association_id: str) -> ShopifyStoreAssociation: association = self.store_association_repository.get(association_id) if not association or association.status == AppConnectionStatus.DELETED: raise ShopifyStoreNotFoundError return association def refresh_store( self, association: ShopifyStoreAssociation ) -> ShopifyStoreAssociation: connection = self.fivetran_client.get_shopify_connection( association.fivetran_connector_id ) status = AppConnectionStatus.from_connection_status(connection.status) if status == AppConnectionStatus.CONNECTED: if association.synced_at is None: self.fivetran_client.sync_connection_data( association.fivetran_connector_id ) status = AppConnectionStatus.PENDING elif not association.is_processed: status = AppConnectionStatus.WAITING_FOR_PROCESSING association.status = status association.synced_at = connection.succeeded_at return association