from __future__ import annotations from campaigns.connectors.facebook.enums import ( AudienceEventSourceType, EngagementAudienceEventValue, ) from campaigns.meta.dtos import EngagementAudienceEvent from campaigns.meta.enums import CampaignPlatform EVENTS = [ # Facebook EngagementAudienceEvent( id="page_engaged", name="Any Facebook Page Engagement", platform=CampaignPlatform.FACEBOOK, source_type=AudienceEventSourceType.PAGE, value=EngagementAudienceEventValue.FB_PAGE_ENGAGED, ), EngagementAudienceEvent( id="page_post_interaction", name="Interacted With Facebook Post", platform=CampaignPlatform.FACEBOOK, source_type=AudienceEventSourceType.PAGE, value=EngagementAudienceEventValue.FB_PAGE_POST_INTERACTION, ), EngagementAudienceEvent( id="page_visited", name="Visited Facebook Page", platform=CampaignPlatform.FACEBOOK, source_type=AudienceEventSourceType.PAGE, value=EngagementAudienceEventValue.FB_PAGE_VISITED, ), EngagementAudienceEvent( id="page_liked", name="Liked Facebook Page", platform=CampaignPlatform.FACEBOOK, source_type=AudienceEventSourceType.PAGE, value=EngagementAudienceEventValue.FB_PAGE_LIKED, ), # Instagram EngagementAudienceEvent( id="ig_business_profile_all", name="Any Interaction With Instagram Profile", platform=CampaignPlatform.INSTAGRAM, source_type=AudienceEventSourceType.IG_BUSINESS, value=EngagementAudienceEventValue.IG_BUSINESS_PROFILE_ALL, ), EngagementAudienceEvent( id="ig_business_profile_engaged", name="Engaged with Instagram Profile", platform=CampaignPlatform.INSTAGRAM, source_type=AudienceEventSourceType.IG_BUSINESS, value=EngagementAudienceEventValue.IG_BUSINESS_PROFILE_ENGAGED, ), EngagementAudienceEvent( id="ig_business_profile_visit", name="Visited Instagram Profile", platform=CampaignPlatform.INSTAGRAM, source_type=AudienceEventSourceType.IG_BUSINESS, value=EngagementAudienceEventValue.IG_BUSINESS_PROFILE_VISIT, ), EngagementAudienceEvent( id="instagram_profile_follow", name="Followed Instagram Profile", platform=CampaignPlatform.INSTAGRAM, source_type=AudienceEventSourceType.IG_BUSINESS, value=EngagementAudienceEventValue.IG_PROFILE_FOLLOW, ), ] class EngagementAudienceEventRepository: def __init__(self, events: list[EngagementAudienceEvent] | None = None) -> None: self._events = events or EVENTS def find_by_ids(self, ids: list[str]) -> list[EngagementAudienceEvent]: return [event for event in self._events if event.id in ids] def find_by_platforms( self, platforms: list[CampaignPlatform] ) -> list[EngagementAudienceEvent]: return [event for event in self._events if event.platform in platforms]