from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.requests import AuthRequest from email_campaigns.emails.repositories import EmailSalesAnalyticsRepository from email_campaigns.emails.types import EmailSalesLocationAnalytics from email_campaigns.reporting.handlers.get_email_reporting_report import ( GetEmailReportingReportHandler, GetEmailReportingReportRequest, ) @dataclass(kw_only=True) class GetReportingSalesLocationsAnalyticsRequest(AuthRequest): report_id: str @dataclass class GetReportingSalesLocationsAnalyticsResponse: data: list[EmailSalesLocationAnalytics] @singleton class GetReportingSalesLocationsAnalyticsHandler: def __init__( self, get_report_handler: GetEmailReportingReportHandler, email_sales_analytics_repository: EmailSalesAnalyticsRepository, ) -> None: self.get_report_handler = get_report_handler self.email_sales_analytics_repository = email_sales_analytics_repository def handle( self, request: GetReportingSalesLocationsAnalyticsRequest ) -> GetReportingSalesLocationsAnalyticsResponse: report = self.get_report_handler.handle( GetEmailReportingReportRequest( identity_id=request.identity_id, report_id=request.report_id, ) ) data = self.email_sales_analytics_repository.find_location_sales_by_email_ids( report.email_ids ) return GetReportingSalesLocationsAnalyticsResponse(data=data)