Frontend gaps fill work. Testing fixes work. Auditing in progress.

This commit is contained in:
StellaOps Bot
2025-12-30 01:22:58 +02:00
parent 1dc4bcbf10
commit 7a5210e2aa
928 changed files with 183942 additions and 3941 deletions

View File

@@ -0,0 +1,79 @@
-- Platform Schema Migration 001: Platform Service State
-- Defines storage for onboarding, preferences, profiles, quota alerts, and search history.
CREATE SCHEMA IF NOT EXISTS platform;
-- Dashboard preferences per tenant/user
CREATE TABLE IF NOT EXISTS platform.dashboard_preferences (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id TEXT NOT NULL,
actor_id TEXT NOT NULL,
preferences JSONB NOT NULL DEFAULT '{}',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_by TEXT,
UNIQUE(tenant_id, actor_id)
);
CREATE INDEX idx_dashboard_preferences_tenant ON platform.dashboard_preferences(tenant_id);
-- Saved dashboard profiles per tenant
CREATE TABLE IF NOT EXISTS platform.dashboard_profiles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id TEXT NOT NULL,
profile_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
preferences JSONB NOT NULL DEFAULT '{}',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_by TEXT,
UNIQUE(tenant_id, profile_id)
);
CREATE INDEX idx_dashboard_profiles_tenant ON platform.dashboard_profiles(tenant_id);
CREATE INDEX idx_dashboard_profiles_profile ON platform.dashboard_profiles(tenant_id, profile_id);
-- Onboarding state per tenant/user
CREATE TABLE IF NOT EXISTS platform.onboarding_state (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id TEXT NOT NULL,
actor_id TEXT NOT NULL,
status TEXT NOT NULL,
steps JSONB NOT NULL DEFAULT '[]',
skipped_reason TEXT,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_by TEXT,
UNIQUE(tenant_id, actor_id)
);
CREATE INDEX idx_onboarding_state_tenant ON platform.onboarding_state(tenant_id);
-- Quota alert subscriptions (per tenant)
CREATE TABLE IF NOT EXISTS platform.quota_alerts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id TEXT NOT NULL,
alert_id TEXT NOT NULL,
quota_id TEXT NOT NULL,
severity TEXT NOT NULL,
threshold NUMERIC(18, 4) NOT NULL,
condition TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_by TEXT,
UNIQUE(tenant_id, alert_id)
);
CREATE INDEX idx_quota_alerts_tenant ON platform.quota_alerts(tenant_id);
CREATE INDEX idx_quota_alerts_quota ON platform.quota_alerts(tenant_id, quota_id);
-- Search history (optional, user-scoped)
CREATE TABLE IF NOT EXISTS platform.search_history (
id BIGSERIAL PRIMARY KEY,
tenant_id TEXT NOT NULL,
actor_id TEXT NOT NULL,
query TEXT NOT NULL,
sources TEXT[] NOT NULL DEFAULT '{}',
result_count INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_search_history_tenant ON platform.search_history(tenant_id);
CREATE INDEX idx_search_history_created ON platform.search_history(tenant_id, created_at DESC);