from pydantic import TypeAdapter from dmp.ad_reporting.dtos import ( AdReportingCampaign, AdReportingCampaignCountryToplinePerformance, AdReportingCampaignObjective, ) from dmp.ad_reporting.models import AdReportingCampaignCountryDbt from dmp.adapters.db import ReportingRepository AdReportingCampaignList = TypeAdapter(list[AdReportingCampaign]) AdReportingCampaignCountryToplinePerformanceList = TypeAdapter( list[AdReportingCampaignCountryToplinePerformance] ) AdReportingCampaignObjectiveList = TypeAdapter(list[AdReportingCampaignObjective]) class AdReportingCampaignCountryRepository( ReportingRepository[AdReportingCampaignCountryDbt] ): def find_by_ids_group_by_platform_objective_and_country( self, campaign_ids: set[str] ) -> list[AdReportingCampaignCountryToplinePerformance]: if not campaign_ids: return [] query = self.db.query_from_template( "ad-reporting/campaign-country/find-by-ids-group-by-platform-objective-and-country.sql", context={"campaign_ids": campaign_ids}, ) return AdReportingCampaignCountryToplinePerformanceList.validate_python( self.db.session.execute(query).mappings() )