304 lines
7.7 KiB
SQL
304 lines
7.7 KiB
SQL
-- Spark Platform - Complete Directus Schema Setup
|
|
-- This script creates all tables, fields, and imports data
|
|
|
|
-- 1. Create sites table
|
|
CREATE TABLE IF NOT EXISTS sites (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
name VARCHAR(255) NOT NULL,
|
|
url VARCHAR(500) NOT NULL,
|
|
wp_username VARCHAR(255),
|
|
wp_app_password VARCHAR(500),
|
|
status VARCHAR(50) DEFAULT 'active',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 2. Create posts table
|
|
CREATE TABLE IF NOT EXISTS posts (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
title VARCHAR(500) NOT NULL,
|
|
content TEXT,
|
|
excerpt TEXT,
|
|
status VARCHAR(50) DEFAULT 'draft',
|
|
site_id UUID REFERENCES sites (id) ON DELETE CASCADE,
|
|
avatar_key VARCHAR(100),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
published_at TIMESTAMP
|
|
);
|
|
|
|
-- 3. Create pages table
|
|
CREATE TABLE IF NOT EXISTS pages (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
title VARCHAR(500) NOT NULL,
|
|
slug VARCHAR(255) NOT NULL UNIQUE,
|
|
content TEXT,
|
|
site_id UUID REFERENCES sites (id) ON DELETE CASCADE,
|
|
status VARCHAR(50) DEFAULT 'draft',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 4. Create leads table
|
|
CREATE TABLE IF NOT EXISTS leads (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
email VARCHAR(255) NOT NULL,
|
|
name VARCHAR(255),
|
|
phone VARCHAR(50),
|
|
source VARCHAR(255),
|
|
site_id UUID REFERENCES sites (id) ON DELETE SET NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 5. Create avatar_intelligence table
|
|
CREATE TABLE IF NOT EXISTS avatar_intelligence (
|
|
id SERIAL PRIMARY KEY,
|
|
avatar_key VARCHAR(100) NOT NULL UNIQUE,
|
|
base_name VARCHAR(255),
|
|
wealth_cluster VARCHAR(255),
|
|
business_niches JSONB,
|
|
data JSONB
|
|
);
|
|
|
|
-- 6. Create avatar_variants table
|
|
CREATE TABLE IF NOT EXISTS avatar_variants (
|
|
id SERIAL PRIMARY KEY,
|
|
avatar_key VARCHAR(100) NOT NULL,
|
|
variant_type VARCHAR(50),
|
|
data JSONB
|
|
);
|
|
|
|
-- 7. Create geo_intelligence table
|
|
CREATE TABLE IF NOT EXISTS geo_intelligence (
|
|
id SERIAL PRIMARY KEY,
|
|
cluster_key VARCHAR(100) NOT NULL UNIQUE,
|
|
data JSONB
|
|
);
|
|
|
|
-- 8. Create spintax_dictionaries table
|
|
CREATE TABLE IF NOT EXISTS spintax_dictionaries (
|
|
id SERIAL PRIMARY KEY,
|
|
category VARCHAR(100) NOT NULL,
|
|
data JSONB
|
|
);
|
|
|
|
-- 9. Create cartesian_patterns table
|
|
CREATE TABLE IF NOT EXISTS cartesian_patterns (
|
|
id SERIAL PRIMARY KEY,
|
|
pattern_key VARCHAR(100) NOT NULL UNIQUE,
|
|
pattern_type VARCHAR(100),
|
|
data JSONB
|
|
);
|
|
|
|
-- 10. Create offer_blocks table
|
|
CREATE TABLE IF NOT EXISTS offer_blocks (
|
|
id SERIAL PRIMARY KEY,
|
|
block_type VARCHAR(100) NOT NULL,
|
|
avatar_key VARCHAR(100),
|
|
data JSONB
|
|
);
|
|
|
|
-- Register collections with Directus
|
|
INSERT INTO
|
|
directus_collections (
|
|
collection,
|
|
icon,
|
|
note,
|
|
hidden,
|
|
singleton,
|
|
accountability,
|
|
sort_field
|
|
)
|
|
VALUES (
|
|
'sites',
|
|
'language',
|
|
'Managed WordPress sites',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'posts',
|
|
'article',
|
|
'Generated content posts',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'pages',
|
|
'description',
|
|
'Static pages',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'leads',
|
|
'contacts',
|
|
'Lead capture data',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'avatar_intelligence',
|
|
'person',
|
|
'Avatar intelligence data',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'avatar_variants',
|
|
'people',
|
|
'Avatar variant data',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'geo_intelligence',
|
|
'map',
|
|
'Geographic intelligence',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'spintax_dictionaries',
|
|
'book',
|
|
'Spintax dictionaries',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'cartesian_patterns',
|
|
'grid_on',
|
|
'Cartesian patterns',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
),
|
|
(
|
|
'offer_blocks',
|
|
'inventory',
|
|
'Offer blocks',
|
|
false,
|
|
false,
|
|
'all',
|
|
NULL
|
|
) ON CONFLICT (collection) DO NOTHING;
|
|
|
|
-- Register fields with Directus for sites
|
|
INSERT INTO directus_fields (collection, field, type, interface, special)
|
|
VALUES
|
|
('sites', 'id', 'uuid', 'input', ARRAY['uuid']),
|
|
('sites', 'name', 'string', 'input', NULL),
|
|
('sites', 'url', 'string', 'input', NULL),
|
|
('sites', 'wp_username', 'string', 'input', NULL),
|
|
('sites', 'wp_app_password', 'string', 'input', ARRAY['hash']),
|
|
('sites', 'status', 'string', 'select-dropdown', NULL),
|
|
('sites', 'created_at', 'timestamp', 'datetime', ARRAY['date-created']),
|
|
('sites', 'updated_at', 'timestamp', 'datetime', ARRAY['date-updated'])
|
|
ON CONFLICT (collection, field) DO NOTHING;
|
|
|
|
-- Register fields for posts
|
|
INSERT INTO directus_fields (collection, field, type, interface, special)
|
|
VALUES
|
|
('posts', 'id', 'uuid', 'input', ARRAY['uuid']),
|
|
('posts', 'title', 'string', 'input', NULL),
|
|
('posts', 'content', 'text', 'input-rich-text-html', NULL),
|
|
('posts', 'excerpt', 'text', 'textarea', NULL),
|
|
('posts', 'status', 'string', 'select-dropdown', NULL),
|
|
('posts', 'site_id', 'uuid', 'select-dropdown-m2o', NULL),
|
|
('posts', 'avatar_key', 'string', 'input', NULL),
|
|
('posts', 'created_at', 'timestamp', 'datetime', ARRAY['date-created']),
|
|
('posts', 'published_at', 'timestamp', 'datetime', NULL)
|
|
ON CONFLICT (collection, field) DO NOTHING;
|
|
|
|
-- Register fields for pages
|
|
INSERT INTO directus_fields (collection, field, type, interface, special)
|
|
VALUES
|
|
('pages', 'id', 'uuid', 'input', ARRAY['uuid']),
|
|
('pages', 'title', 'string', 'input', NULL),
|
|
('pages', 'slug', 'string', 'input', NULL),
|
|
('pages', 'content', 'text', 'input-rich-text-html', NULL),
|
|
('pages', 'site_id', 'uuid', 'select-dropdown-m2o', NULL),
|
|
('pages', 'status', 'string', 'select-dropdown', NULL),
|
|
('pages', 'created_at', 'timestamp', 'datetime', ARRAY['date-created'])
|
|
ON CONFLICT (collection, field) DO NOTHING;
|
|
|
|
-- Register fields for leads
|
|
INSERT INTO directus_fields (collection, field, type, interface, special)
|
|
VALUES
|
|
('leads', 'id', 'uuid', 'input', ARRAY['uuid']),
|
|
('leads', 'email', 'string', 'input', NULL),
|
|
('leads', 'name', 'string', 'input', NULL),
|
|
('leads', 'phone', 'string', 'input', NULL),
|
|
('leads', 'source', 'string', 'input', NULL),
|
|
('leads', 'site_id', 'uuid', 'select-dropdown-m2o', NULL),
|
|
('leads', 'created_at', 'timestamp', 'datetime', ARRAY['date-created'])
|
|
ON CONFLICT (collection, field) DO NOTHING;
|
|
|
|
-- Register fields for avatar_intelligence
|
|
INSERT INTO
|
|
directus_fields (
|
|
collection,
|
|
field,
|
|
type,
|
|
interface,
|
|
special
|
|
)
|
|
VALUES (
|
|
'avatar_intelligence',
|
|
'id',
|
|
'integer',
|
|
'input',
|
|
NULL
|
|
),
|
|
(
|
|
'avatar_intelligence',
|
|
'avatar_key',
|
|
'string',
|
|
'input',
|
|
NULL
|
|
),
|
|
(
|
|
'avatar_intelligence',
|
|
'base_name',
|
|
'string',
|
|
'input',
|
|
NULL
|
|
),
|
|
(
|
|
'avatar_intelligence',
|
|
'wealth_cluster',
|
|
'string',
|
|
'input',
|
|
NULL
|
|
),
|
|
(
|
|
'avatar_intelligence',
|
|
'business_niches',
|
|
'json',
|
|
'input-code',
|
|
NULL
|
|
),
|
|
(
|
|
'avatar_intelligence',
|
|
'data',
|
|
'json',
|
|
'input-code',
|
|
NULL
|
|
) ON CONFLICT (collection, field) DO NOTHING;
|
|
|
|
COMMIT; |