57 lines
2.2 KiB
SQL
57 lines
2.2 KiB
SQL
-- Unified projects, assets linking, UI preferences (layout + viz modes)
|
|
|
|
CREATE TABLE IF NOT EXISTS cockpit_projects (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
client_id INTEGER REFERENCES clients(id) ON DELETE SET NULL,
|
|
description TEXT,
|
|
status VARCHAR(32) DEFAULT 'active',
|
|
created_by VARCHAR(64) DEFAULT 'ceo',
|
|
metadata JSONB DEFAULT '{}'::jsonb,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_cockpit_projects_client ON cockpit_projects(client_id);
|
|
CREATE INDEX IF NOT EXISTS idx_cockpit_projects_status ON cockpit_projects(status, updated_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS project_assets (
|
|
id SERIAL PRIMARY KEY,
|
|
project_id INTEGER NOT NULL REFERENCES cockpit_projects(id) ON DELETE CASCADE,
|
|
asset_type VARCHAR(64) NOT NULL,
|
|
ref_id VARCHAR(128),
|
|
title VARCHAR(255),
|
|
file_path TEXT,
|
|
payload JSONB DEFAULT '{}'::jsonb,
|
|
created_by VARCHAR(64) DEFAULT 'ceo',
|
|
source_agent VARCHAR(64),
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_project_assets_project ON project_assets(project_id, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_project_assets_type ON project_assets(asset_type, ref_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS packaging_outputs (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
project_id INTEGER REFERENCES cockpit_projects(id) ON DELETE SET NULL,
|
|
spec JSONB NOT NULL,
|
|
svg TEXT NOT NULL,
|
|
created_by VARCHAR(64) DEFAULT 'packaging',
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_ui_preferences (
|
|
user_key VARCHAR(64) PRIMARY KEY DEFAULT 'ceo',
|
|
dashboard_layout JSONB DEFAULT '[]'::jsonb,
|
|
viz_modes JSONB DEFAULT '{}'::jsonb,
|
|
global_viz_mode VARCHAR(32) DEFAULT 'neo-bars',
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
INSERT INTO user_ui_preferences (user_key, dashboard_layout, global_viz_mode) VALUES
|
|
('ceo', '["kpis","executive","briefing","retail","analytics","approvals","feed"]'::jsonb, 'neo-bars')
|
|
ON CONFLICT (user_key) DO NOTHING;
|
|
|
|
ALTER TABLE photo_imports ADD COLUMN IF NOT EXISTS project_id INTEGER REFERENCES cockpit_projects(id) ON DELETE SET NULL;
|
|
ALTER TABLE photo_imports ADD COLUMN IF NOT EXISTS created_by VARCHAR(64) DEFAULT 'ceo';
|