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.dtos import AdFormat from campaigns.meta.enums import CampaignContentType, CampaignPlatform from campaigns.meta.services import AdFormatService, CampaignService @dataclass(frozen=True) class GetCampaignAdFormatsRequest: user: User campaign_id: str content_type: CampaignContentType platforms: list[CampaignPlatform] @dataclass class GetCampaignAdFormatsHandler( Handler[GetCampaignAdFormatsRequest, list[AdFormat]], ): db: Database campaign_service: CampaignService ad_format_service: AdFormatService @session_context(in_transaction=False) async def handle(self, request: GetCampaignAdFormatsRequest) -> list[AdFormat]: campaign = await self.campaign_service.get_user_campaign( user=request.user, campaign_id=request.campaign_id ) return self.ad_format_service.get_campaign_available_ad_formats( campaign, content_type=request.content_type, platforms=request.platforms, )