from anydi import singleton from pydantic import TypeAdapter from dmp.adapters.db import DefaultDB from dmp.audiences.dtos import AudienceAdAccount AudienceAdAccountListMapper = TypeAdapter(list[AudienceAdAccount]) @singleton class AudienceAdAccountRepository: def __init__(self, db: DefaultDB) -> None: self.db = db def find_for_audience_sharing( self, audience_id: str, identity_id: str, vendor_ids: list[int] | None = None, subaccount_ids: list[int] | None = None, ) -> list[AudienceAdAccount]: query = self.db.query_from_template( "audience-ad-account/find-for-audience-sharing.sql", context={ "audience_id": audience_id, "identity_id": identity_id, "vendor_ids": vendor_ids, "subaccount_ids": subaccount_ids, }, ) result = self.db.session.execute(query) return AudienceAdAccountListMapper.validate_python(result.mappings().all())