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 CampaignValidationSummary from campaigns.meta.models import Campaign from campaigns.meta.services import CampaignService from campaigns.meta.validators import CampaignValidator @dataclass(frozen=True) class GetCampaignOverviewRequest: user: User campaign_id: str camelize: bool = True @dataclass class GetCampaignOverviewResponse: campaign: Campaign summary: list[CampaignValidationSummary] @dataclass class GetCampaignOverviewHandler( Handler[GetCampaignOverviewRequest, GetCampaignOverviewResponse], ): db: Database campaign_service: CampaignService campaign_validator: CampaignValidator @session_context(in_transaction=False) async def handle( self, request: GetCampaignOverviewRequest ) -> GetCampaignOverviewResponse: campaign = await self.campaign_service.get_user_campaign( user=request.user, campaign_id=request.campaign_id ) summary = await self.campaign_validator.get_summary( campaign, user=request.user, camelize=request.camelize ) return GetCampaignOverviewResponse(campaign=campaign, summary=summary)