from dataclasses import dataclass from campaigns.auth.dtos import User from campaigns.auth.exceptions import PermissionDenied from campaigns.meta.exceptions import CampaignDoesNotExist from campaigns.meta.models import Campaign from campaigns.meta.repositories import CampaignRepository @dataclass class CampaignService: campaign_repository: CampaignRepository async def get_user_campaign(self, user: User, campaign_id: str) -> Campaign: campaign = await self.campaign_repository.get(campaign_id) if not campaign: raise CampaignDoesNotExist if not user.account_access.allowed_for(campaign): raise PermissionDenied("You don't have permission for this campaign.") return campaign