-- Migration 092: Store Intelligence Cache -- Pre-computed store intelligence data refreshed by analytics_refresh task -- Eliminates costly aggregation queries on /intelligence/stores endpoint CREATE TABLE IF NOT EXISTS store_intelligence_cache ( dispensary_id INTEGER PRIMARY KEY REFERENCES dispensaries(id) ON DELETE CASCADE, -- Basic counts sku_count INTEGER NOT NULL DEFAULT 0, brand_count INTEGER NOT NULL DEFAULT 0, snapshot_count INTEGER NOT NULL DEFAULT 0, -- Pricing avg_price_rec NUMERIC(10,2), avg_price_med NUMERIC(10,2), min_price NUMERIC(10,2), max_price NUMERIC(10,2), -- Category breakdown (JSONB for flexibility) category_counts JSONB DEFAULT '{}', -- Timestamps last_crawl_at TIMESTAMPTZ, last_refresh_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- Metadata created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Index for fast lookups CREATE INDEX IF NOT EXISTS idx_store_intelligence_cache_refresh ON store_intelligence_cache (last_refresh_at DESC); COMMENT ON TABLE store_intelligence_cache IS 'Pre-computed store intelligence metrics, refreshed by analytics_refresh task'; COMMENT ON COLUMN store_intelligence_cache.category_counts IS 'JSON object mapping category_raw to product count';