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 EmailSalesShopAnalytics from email_campaigns.reporting.handlers.get_email_reporting_report import ( GetEmailReportingReportHandler, GetEmailReportingReportRequest, ) @dataclass(kw_only=True) class GetReportingSalesShopsAnalyticsRequest(AuthRequest): report_id: str @dataclass class GetReportingSalesShopsAnalyticsResponse: data: list[EmailSalesShopAnalytics] @singleton class GetReportingSalesShopsAnalyticsHandler: 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: GetReportingSalesShopsAnalyticsRequest ) -> GetReportingSalesShopsAnalyticsResponse: report = self.get_report_handler.handle( GetEmailReportingReportRequest( identity_id=request.identity_id, report_id=request.report_id, ) ) data = self.email_sales_analytics_repository.find_shop_sales_by_email_ids( report.email_ids ) return GetReportingSalesShopsAnalyticsResponse(data=data)