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 CampaignPost from campaigns.meta.exceptions import CampaignPostDoesNotExist from campaigns.meta.services import CampaignPostService, CampaignService @dataclass(frozen=True) class GetCampaignPostRequest: user: User campaign_id: str @dataclass class GetCampaignPostHandler( Handler[GetCampaignPostRequest, CampaignPost | None], ): db: Database campaign_service: CampaignService campaign_post_service: CampaignPostService @session_context(in_transaction=False) async def handle(self, request: GetCampaignPostRequest) -> CampaignPost | None: campaign = await self.campaign_service.get_user_campaign( user=request.user, campaign_id=request.campaign_id ) try: return await self.campaign_post_service.get_campaign_post(campaign) except CampaignPostDoesNotExist: pass return None