from loguru import logger from ..db.session import get_db_session from ..db.queries import QueryLoader from ..config.paths import QUERY_PATHS from ..config.email import DATA_SOURCE_IDS class DashboardService: def __init__(self): self.dbs = get_db_session() self.query_loader = QueryLoader() def update(self) -> None: self._update_main_dashboard() self._update_tiktok_dashboard() self._refresh_tableau_extracts() def _update_main_dashboard(self) -> None: try: query = self.query_loader.load(QUERY_PATHS.dashboard_main) self.dbs.execute(query) self.dbs.commit() logger.info("Updated main dashboard table") except Exception as e: logger.error(f"Failed to update main dashboard: {e}") def _update_tiktok_dashboard(self) -> None: try: query = self.query_loader.load(QUERY_PATHS.dashboard_tiktok) self.dbs.execute(query) self.dbs.commit() logger.info("Updated TikTok dashboard table") except Exception as e: logger.error(f"Failed to update TikTok dashboard: {e}") def _refresh_tableau_extracts(self) -> None: try: from djagitit.tableau import refresh_extracts refresh_extracts(DATA_SOURCE_IDS, site="int_mktng") logger.info("Refreshed Tableau extracts") except ImportError: logger.warning("djagitit.tableau not available, skipping extract refresh") except Exception as e: logger.error(f"Failed to refresh Tableau extracts: {e}")