Onboarding Manager and Router Manager refactored, analytics and background jobs added, database setup updated, environment setup updated, frontend updated, backend updated. Critical onboarding database migration implemented.
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
"""
|
|
Analytics Data Models
|
|
|
|
Core data structures for analytics data across all platforms.
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Dict, Any, Optional
|
|
|
|
|
|
@dataclass
|
|
class AnalyticsData:
|
|
"""Standardized analytics data structure for all platforms"""
|
|
platform: str
|
|
metrics: Dict[str, Any]
|
|
date_range: Dict[str, str]
|
|
last_updated: str
|
|
status: str # 'success', 'error', 'partial'
|
|
error_message: Optional[str] = None
|
|
|
|
def is_successful(self) -> bool:
|
|
"""Check if the analytics data was successfully retrieved"""
|
|
return self.status == 'success'
|
|
|
|
def is_partial(self) -> bool:
|
|
"""Check if the analytics data is partially available"""
|
|
return self.status == 'partial'
|
|
|
|
def has_error(self) -> bool:
|
|
"""Check if there was an error retrieving analytics data"""
|
|
return self.status == 'error'
|
|
|
|
def get_metric(self, key: str, default: Any = None) -> Any:
|
|
"""Get a specific metric value with fallback"""
|
|
return self.metrics.get(key, default)
|
|
|
|
def get_total_clicks(self) -> int:
|
|
"""Get total clicks across all platforms"""
|
|
return self.get_metric('total_clicks', 0)
|
|
|
|
def get_total_impressions(self) -> int:
|
|
"""Get total impressions across all platforms"""
|
|
return self.get_metric('total_impressions', 0)
|
|
|
|
def get_avg_ctr(self) -> float:
|
|
"""Get average click-through rate"""
|
|
return self.get_metric('avg_ctr', 0.0)
|
|
|
|
def get_avg_position(self) -> float:
|
|
"""Get average position in search results"""
|
|
return self.get_metric('avg_position', 0.0)
|