-- Expand page-view kinds, rename events table, add lifetime counters. -- Events retained max 6 months (purged by Nest cron). Counters kept forever. DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'website_page_kind') THEN CREATE TYPE website_page_kind AS ENUM ( 'home', 'portfolio_list', 'portfolio_detail', 'product_list', 'product_detail', 'store_item_list', 'store_item_detail', 'blog_list', 'blog_detail', 'video_list', 'video_detail' ); END IF; END $$; -- Recreate events table with new kind enum (table is empty / low volume today). CREATE TABLE IF NOT EXISTS website_page_views ( id BIGSERIAL PRIMARY KEY, business_id BIGINT NOT NULL REFERENCES businesses (id) ON DELETE CASCADE, page_kind website_page_kind NOT NULL, entity_id BIGINT NOT NULL DEFAULT 0, page_path TEXT, viewed_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_website_page_views_business_kind_time ON website_page_views (business_id, page_kind, viewed_at DESC); -- Copy any legacy rows from website_content_views DO $$ BEGIN IF EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'website_content_views' ) THEN INSERT INTO website_page_views (business_id, page_kind, entity_id, page_path, viewed_at) SELECT business_id, CASE view_kind::text WHEN 'website' THEN 'home'::website_page_kind WHEN 'product' THEN 'product_detail'::website_page_kind WHEN 'portfolio' THEN 'portfolio_detail'::website_page_kind WHEN 'blog' THEN 'blog_detail'::website_page_kind ELSE 'home'::website_page_kind END, COALESCE(entity_id, 0), page_path, viewed_at FROM website_content_views; DROP TABLE website_content_views; END IF; END $$; DROP TYPE IF EXISTS website_view_kind; CREATE TABLE IF NOT EXISTS website_page_view_counters ( id BIGSERIAL PRIMARY KEY, business_id BIGINT NOT NULL REFERENCES businesses (id) ON DELETE CASCADE, page_kind website_page_kind NOT NULL, entity_id BIGINT NOT NULL DEFAULT 0, total_count BIGINT NOT NULL DEFAULT 0, updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), CONSTRAINT uq_website_page_view_counters_biz_kind_entity UNIQUE (business_id, page_kind, entity_id) ); CREATE INDEX IF NOT EXISTS idx_website_page_view_counters_business_kind ON website_page_view_counters (business_id, page_kind);