from collections.abc import Sequence import sqlalchemy as sa from pydantic import TypeAdapter from dmp.adapters.db import ReportingDB, ReportingRepository from dmp.api.crm_campaign.schemas import CrmCampaign from dmp.crm_campaigns.models import CrmCampaignDbt CampaignIdValueList = TypeAdapter(list[CrmCampaign]) class CrmCampaignRepository(ReportingRepository[CrmCampaignDbt]): def __init__(self, db: ReportingDB) -> None: super().__init__(db) def get_crm_campaign_ids( self, vendor_ids: list[int], subaccount_ids: list[int], global_participant_ids: list[str] | None, custom_list_ids: list[str] | None, campaign_ids: list[str] | None, limit: int, search: str | None = None, ) -> Sequence[CrmCampaignDbt]: template_name = "campaigns/find-by-criteria.sql" query = self.db.query_from_template( template_name, context={ "vendor_ids": vendor_ids, "subaccount_ids": subaccount_ids, "global_participant_ids": global_participant_ids, "custom_list_ids": custom_list_ids, "campaign_ids": campaign_ids, "limit": limit, "search_campaign": search, }, ) return ( self.db.session.execute(sa.select(CrmCampaignDbt).from_statement(query)) .scalars() .all() )