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 email_campaigns.campaigns.models import EmailCampaign from email_campaigns.campaigns.services import EmailCampaignService @dataclass(kw_only=True) class GetCampaignRequest(AuthRequest): campaign_id: str @singleton class GetCampaignHandler: permission = Permission("email_campaign", "view") def __init__( self, auth_service: AuthService, campaign_service: EmailCampaignService, ) -> None: self.auth_service = auth_service self.campaign_service = campaign_service def handle(self, request: GetCampaignRequest) -> EmailCampaign: campaign = self.campaign_service.get_campaign(request.campaign_id) self.auth_service.authorize_account( request.identity_id, account=campaign.account, permission=self.permission, ) # Prefetch recipients count for draft campaigns self.campaign_service.prefetch_audience([campaign]) return campaign