from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.requests import AuthRequest from fansifter_common.auth.services import AuthService from fansifter_common.auth.types import Permission from dmp.shopify.dtos import ShopifyStore from dmp.shopify.repositories import StoreAssociationRepository @dataclass class GetStoresRequest(AuthRequest): pass @singleton class GetStoresHandler: permission = Permission("fan_data_channel", "view") def __init__( self, auth_service: AuthService, store_association_repository: StoreAssociationRepository, ) -> None: self.auth_service = auth_service self.store_association_repository = store_association_repository def handle(self, request: GetStoresRequest) -> list[ShopifyStore]: account_access = self.auth_service.authorize_for_permission( request.identity_id, permission=self.permission ) return self.store_association_repository.find_by_account_ids( vendor_ids=account_access.vendor_ids, subaccount_ids=account_access.subaccount_ids, )