from auth.auth_view import AuthorizedView from reporting.schemas import ReportingMetricsQuery, ReportingMetricsResponse, StreamRevenueMetadata from reporting.services.reporting_metrics_service import ReportingMetricsBuilder from utils.handlers import get_request_query_model from utils.test_helpers import sync class ProjectReportingMetricsView(AuthorizedView): metrics_service: ReportingMetricsBuilder @sync async def get(self, project_id: int) -> ReportingMetricsResponse: params = get_request_query_model(ReportingMetricsQuery) self.metrics_service = ReportingMetricsBuilder(params.reportingType) revenue_stream_rate = self.metrics_service.get_revenue_stream_rates_data_by_country( country_id=params.territoryId ) return ReportingMetricsResponse( items=await self.metrics_service.get_metrics_for_project( project_id=project_id, start_date=params.startDate, end_date=params.endDate, dsps=params.dsps, territory_id=params.territoryId, ), metadata=StreamRevenueMetadata( crossPlatformBlendedRate=getattr(revenue_stream_rate, "cross_platform_blended_rate", 0), spotifyBlendedRate=getattr(revenue_stream_rate, "spotify_blended_rate", 0), appleBlendedRate=getattr(revenue_stream_rate, "apple_blended_rate", 0), amazonBlendedRate=getattr(revenue_stream_rate, "amazon_blended_rate", 0), ), )