from anydi import singleton from fansifter_common.auth.account import AccountAccess from dmp.ad_reporting.exceptions import AdReportingCampaignNotFoundError from dmp.ad_reporting.models import AdReportingCampaignDbt from dmp.ad_reporting.repositories import AdReportingCampaignRepository from .account import AdReportingAccountService @singleton class AdReportingCampaignService: def __init__( self, campaign_repository: AdReportingCampaignRepository, account_service: AdReportingAccountService, ) -> None: self.campaign_repository = campaign_repository self.account_service = account_service def get_allowed_campaign( self, account_access: AccountAccess, *, campaign_id: str ) -> AdReportingCampaignDbt: account_ids = self.account_service.get_allowed_account_ids(account_access) campaign = self.campaign_repository.get_by_id_and_account_ids( campaign_id, account_ids=account_ids, ) if not campaign: raise AdReportingCampaignNotFoundError return campaign def save_campaign(self, campaign: AdReportingCampaignDbt) -> None: self.campaign_repository.add(campaign)