"""Constants for KPI cache module.""" from app.kpi_cache.widget_groups import ( OPERATIONS_WIDGETS, INVENTORY_WIDGETS, FINANCIAL_WIDGETS, SALES_WIDGETS, CUSTOMERS_WIDGETS, CATALOGUE_WIDGETS, SPA_BOOKINGS_WIDGETS, TRADE_NETWORK_WIDGETS, SALES_CHART_WIDGETS, OPERATIONS_CHART_WIDGETS, STAFF_CHART_WIDGETS, CUSTOMERS_CHART_WIDGETS, CATALOGUE_CHART_WIDGETS, SALES_TABLE_WIDGETS, OPERATIONS_TABLE_WIDGETS, STAFF_TABLE_WIDGETS, CUSTOMERS_TABLE_WIDGETS, CATALOGUE_TABLE_WIDGETS, ) # MongoDB collection name for durable KPI snapshots KPI_CACHE_COLLECTION = "kpi_cache" # Redis key prefix for hot L1 cache REDIS_KPI_PREFIX = "kpi" # Redis TTLs (seconds) — L1 hot cache, shorter than MongoDB snapshots REDIS_TTL_FINANCIAL = 1800 # 30 min REDIS_TTL_INVENTORY = 600 # 10 min REDIS_TTL_OPERATIONS = 600 # 10 min REDIS_TTL_SALES = 900 # 15 min REDIS_TTL_CUSTOMERS = 600 # 10 min REDIS_TTL_CATALOGUE = 600 # 10 min REDIS_TTL_SPA_BOOKINGS = 300 # 5 min — booking state changes frequently REDIS_TTL_TRADE_NETWORK = 900 # 15 min # Widget category → Redis TTL mapping WIDGET_REDIS_TTL: dict = { "financial": REDIS_TTL_FINANCIAL, "inventory": REDIS_TTL_INVENTORY, "operations": REDIS_TTL_OPERATIONS, "sales": REDIS_TTL_SALES, "customers": REDIS_TTL_CUSTOMERS, "catalogue": REDIS_TTL_CATALOGUE, "spa_bookings": REDIS_TTL_SPA_BOOKINGS, "trade_network": REDIS_TTL_TRADE_NETWORK, # Chart widget categories share TTLs with their scalar counterparts "sales_charts": REDIS_TTL_SALES, "operations_charts": REDIS_TTL_OPERATIONS, "staff_charts": REDIS_TTL_OPERATIONS, "customers_charts": REDIS_TTL_CUSTOMERS, "catalogue_charts": REDIS_TTL_CATALOGUE, # Table widget categories "sales_tables": 300, "operations_tables": 120, "staff_tables": 300, "customers_tables": 600, "catalogue_tables": 600, } # Merged registry — assembled from per-category widget group files KPI_WIDGET_REGISTRY: dict = { **OPERATIONS_WIDGETS, **INVENTORY_WIDGETS, **FINANCIAL_WIDGETS, **SALES_WIDGETS, **CUSTOMERS_WIDGETS, **CATALOGUE_WIDGETS, **SPA_BOOKINGS_WIDGETS, **TRADE_NETWORK_WIDGETS, # Chart widgets **SALES_CHART_WIDGETS, **OPERATIONS_CHART_WIDGETS, **STAFF_CHART_WIDGETS, **CUSTOMERS_CHART_WIDGETS, **CATALOGUE_CHART_WIDGETS, # Table widgets **SALES_TABLE_WIDGETS, **OPERATIONS_TABLE_WIDGETS, **STAFF_TABLE_WIDGETS, **CUSTOMERS_TABLE_WIDGETS, **CATALOGUE_TABLE_WIDGETS, }