platform-codebase/features/webmap/database/migrations/001_initial_schema.sql

34 lines
1.4 KiB
SQL
Executable file

-- WebMap Initial Schema
-- Creates websites and website_apps tables for multi-tenant domain routing
-- websites table: Domain to configuration mapping
CREATE TABLE IF NOT EXISTS websites (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slug VARCHAR(255) UNIQUE NOT NULL,
domains TEXT[] NOT NULL,
branding JSONB NOT NULL DEFAULT '{}',
theme JSONB NOT NULL DEFAULT '{}',
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- GIN index for fast domain lookups via ANY()
CREATE INDEX IF NOT EXISTS idx_websites_domains ON websites USING GIN (domains);
CREATE INDEX IF NOT EXISTS idx_websites_slug ON websites (slug);
CREATE INDEX IF NOT EXISTS idx_websites_is_active ON websites (is_active) WHERE is_active = true;
-- website_apps table: App routing per website
CREATE TABLE IF NOT EXISTS website_apps (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
website_id UUID NOT NULL REFERENCES websites(id) ON DELETE CASCADE,
app VARCHAR(100) NOT NULL,
base_path VARCHAR(255) NOT NULL DEFAULT '/',
features JSONB NOT NULL DEFAULT '{}',
sort_order INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(website_id, base_path)
);
CREATE INDEX IF NOT EXISTS idx_website_apps_website_id ON website_apps(website_id);
CREATE INDEX IF NOT EXISTS idx_website_apps_base_path ON website_apps(base_path);