import sqlalchemy as sa from campaigns.connectors.db import Repository from campaigns.meta.dtos import EngagementAudienceKey from campaigns.meta.models import EngagementAudience class EngagementAudienceRepository(Repository[EngagementAudience]): async def get_by_audience_key( self, key: EngagementAudienceKey, ) -> EngagementAudience | None: query = sa.select(EngagementAudience).where( EngagementAudience.facebook_page_external_id == key.facebook_page_external_id, EngagementAudience.instagram_account_external_id == key.instagram_account_external_id, sa.text("event_ids @> :event_ids AND event_ids <@ :event_ids").bindparams( event_ids=key.event_ids ), ) result = await self.db.session.execute(query) return result.scalar_one_or_none()