Files
orion/app/modules/analytics/__init__.py
Samir Boulahtit bd2c99a775 feat: complete analytics module self-containment
Migrate analytics module to fully self-contained structure:

- routes/api/vendor.py - API endpoints
- routes/pages/vendor.py - Page routes with full implementation
- services/stats_service.py - Business logic (moved from app/services)
- services/usage_service.py - Usage tracking (moved from app/services)
- schemas/stats.py - Pydantic schemas (moved from models/schema)
- models/__init__.py - Model exports
- templates/analytics/vendor/ - Templates (moved from app/templates)
- static/vendor/js/ - JavaScript (moved from static/vendor)
- locales/ - Translations (en, de, fr, lu)
- exceptions.py - Module exceptions

Removed legacy files:
- app/modules/analytics/routes/vendor.py (replaced by routes/pages/)
- static/admin/js/analytics.js (unused)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 22:21:21 +01:00

36 lines
1.0 KiB
Python

# app/modules/analytics/__init__.py
"""
Analytics Module - Reporting and analytics.
This is a self-contained module providing:
- Dashboard analytics
- Custom reports
- Data exports
- Performance metrics
Module Structure:
- models/ - Database models (none - uses data from other modules)
- services/ - Business logic (StatsService, UsageService)
- schemas/ - Pydantic DTOs
- routes/ - API routes
- exceptions.py - Module-specific exceptions
"""
# Use lazy imports to avoid circular import issues
def __getattr__(name: str):
"""Lazy import module components to avoid circular imports."""
if name == "analytics_module":
from app.modules.analytics.definition import analytics_module
return analytics_module
elif name == "get_analytics_module_with_routers":
from app.modules.analytics.definition import get_analytics_module_with_routers
return get_analytics_module_with_routers
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
__all__ = ["analytics_module", "get_analytics_module_with_routers"]