from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.requests import AuthRequest from fansifter_common.email import EmailType from email_campaigns.emails.repositories import EmailAnalyticsRepository from email_campaigns.emails.types import EmailReportingLinkAnalytics from email_campaigns.reporting.handlers.get_email_reporting_report import ( GetEmailReportingReportHandler, GetEmailReportingReportRequest, ) @dataclass(kw_only=True) class GetReportingLinkAnalyticsRequest(AuthRequest): report_id: str @dataclass class GetReportingLinkAnalyticsResponse: data: list[EmailReportingLinkAnalytics] @singleton class GetReportingLinkAnalyticsHandler: def __init__( self, get_report_handler: GetEmailReportingReportHandler, email_analytics_repository: EmailAnalyticsRepository, ) -> None: self.get_report_handler = get_report_handler self.email_analytics_repository = email_analytics_repository def handle( self, request: GetReportingLinkAnalyticsRequest ) -> GetReportingLinkAnalyticsResponse: report = self.get_report_handler.handle( GetEmailReportingReportRequest( identity_id=request.identity_id, report_id=request.report_id, ) ) data = ( self.email_analytics_repository.find_reporting_link_analytics_by_email_ids( report.email_ids, email_type=EmailType.CAMPAIGN ) ) return GetReportingLinkAnalyticsResponse(data=data)