54 lines
2.2 KiB
SQL
54 lines
2.2 KiB
SQL
-- Phase 1: Content Generation Schema Updates
|
|
|
|
-- Add columns to existing tables
|
|
ALTER TABLE avatars
|
|
ADD COLUMN IF NOT EXISTS industry VARCHAR(255),
|
|
ADD COLUMN IF NOT EXISTS pain_point TEXT,
|
|
ADD COLUMN IF NOT EXISTS value_prop TEXT;
|
|
|
|
ALTER TABLE campaign_masters
|
|
ADD COLUMN IF NOT EXISTS site_id UUID REFERENCES sites (id) ON DELETE CASCADE;
|
|
|
|
ALTER TABLE content_fragments
|
|
ADD COLUMN IF NOT EXISTS campaign_id UUID REFERENCES campaign_masters (id) ON DELETE CASCADE,
|
|
ADD COLUMN IF NOT EXISTS content_hash VARCHAR(64) UNIQUE,
|
|
ADD COLUMN IF NOT EXISTS use_count INTEGER DEFAULT 0;
|
|
|
|
-- New table: variation_registry (track unique combinations)
|
|
CREATE TABLE IF NOT EXISTS variation_registry (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
campaign_id UUID NOT NULL REFERENCES campaign_masters (id) ON DELETE CASCADE,
|
|
variation_hash VARCHAR(64) UNIQUE NOT NULL,
|
|
resolved_variables JSONB NOT NULL,
|
|
spintax_choices JSONB NOT NULL,
|
|
post_id UUID REFERENCES posts (id) ON DELETE SET NULL,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_variation_hash ON variation_registry (variation_hash);
|
|
|
|
-- New table: block_usage_stats (track how many times each block is used)
|
|
CREATE TABLE IF NOT EXISTS block_usage_stats (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
content_fragment_id UUID REFERENCES content_fragments (id) ON DELETE CASCADE,
|
|
block_type VARCHAR(255) NOT NULL,
|
|
total_uses INTEGER DEFAULT 0,
|
|
last_used_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
UNIQUE (content_fragment_id)
|
|
);
|
|
|
|
-- New table: spintax_variation_stats (track which spintax choices are used most)
|
|
CREATE TABLE IF NOT EXISTS spintax_variation_stats (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
content_fragment_id UUID REFERENCES content_fragments (id) ON DELETE CASCADE,
|
|
variation_path TEXT NOT NULL, -- e.g., "hero.h1.option_1"
|
|
variation_text TEXT NOT NULL,
|
|
use_count INTEGER DEFAULT 0,
|
|
last_used_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_block_usage_fragment ON block_usage_stats (content_fragment_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_spintax_stats_fragment ON spintax_variation_stats (content_fragment_id); |