-- ========================================================= -- Pitch Deck: Version Management (Git-Style History) -- ========================================================= -- Version metadata: each version points to its parent (git-style DAG) CREATE TABLE IF NOT EXISTS pitch_versions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL, description TEXT, parent_id UUID REFERENCES pitch_versions(id) ON DELETE SET NULL, status VARCHAR(20) NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'committed')), created_by UUID REFERENCES pitch_admins(id) ON DELETE SET NULL, committed_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_pitch_versions_parent ON pitch_versions(parent_id); CREATE INDEX IF NOT EXISTS idx_pitch_versions_status ON pitch_versions(status); -- Version content: one row per data table per version (fully materialized) -- table_name values: company, team, financials, market, competitors, features, -- milestones, metrics, funding, products, fm_scenarios, fm_assumptions CREATE TABLE IF NOT EXISTS pitch_version_data ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), version_id UUID NOT NULL REFERENCES pitch_versions(id) ON DELETE CASCADE, table_name TEXT NOT NULL, data JSONB NOT NULL, updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_by UUID REFERENCES pitch_admins(id) ON DELETE SET NULL, UNIQUE(version_id, table_name) ); CREATE INDEX IF NOT EXISTS idx_pitch_version_data_version ON pitch_version_data(version_id); -- Per-investor version assignment (NULL = use base tables) ALTER TABLE pitch_investors ADD COLUMN IF NOT EXISTS assigned_version_id UUID REFERENCES pitch_versions(id) ON DELETE SET NULL;