from dataclasses import dataclass from campaigns.auth.dtos import User from campaigns.connectors.db import Database, session_context from campaigns.core.handler import Handler from campaigns.meta.models import TargetingAudience from campaigns.meta.services import CampaignService @dataclass(frozen=True) class GetCampaignAudiencesRequest: user: User campaign_id: str @dataclass(frozen=True) class GetCampaignAudiencesResponse: targeting_audience: TargetingAudience | None @dataclass class GetCampaignAudiencesHandler( Handler[GetCampaignAudiencesRequest, GetCampaignAudiencesResponse], ): db: Database campaign_service: CampaignService @session_context(in_transaction=False) async def handle( self, request: GetCampaignAudiencesRequest ) -> GetCampaignAudiencesResponse: campaign = await self.campaign_service.get_user_campaign( user=request.user, campaign_id=request.campaign_id ) return GetCampaignAudiencesResponse( targeting_audience=campaign.targeting_audience )