ceo-api/drizzle/0010_ceo_os_features.sql

77 lines
2.1 KiB
SQL

-- CEO OS: Contacts (CRM), Risks (Risk Register), Projects
-- Migration 0010_ceo_os_features
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "contacts" (
"id" uuid DEFAULT gen_random_uuid() PRIMARY KEY NOT NULL,
"tenant_id" uuid NOT NULL,
"workspace_id" uuid,
"organization_id" uuid,
"full_name" text NOT NULL,
"email" text,
"phone" text,
"role" text,
"linkedin_url" text,
"notes" text,
"tags" text[] DEFAULT '{}' NOT NULL,
"source" text,
"consent_status" text DEFAULT 'unknown' NOT NULL,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL,
"deleted_at" timestamp
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "risks" (
"id" uuid DEFAULT gen_random_uuid() PRIMARY KEY NOT NULL,
"tenant_id" uuid NOT NULL,
"workspace_id" uuid,
"title" text NOT NULL,
"description" text,
"category" text,
"probability" text DEFAULT 'medium' NOT NULL,
"impact" text DEFAULT 'medium' NOT NULL,
"risk_score" integer GENERATED ALWAYS AS (
CASE probability
WHEN 'low' THEN 1
WHEN 'medium' THEN 2
WHEN 'high' THEN 3
WHEN 'critical' THEN 4
ELSE 2
END *
CASE impact
WHEN 'low' THEN 1
WHEN 'medium' THEN 2
WHEN 'high' THEN 3
WHEN 'critical' THEN 4
ELSE 2
END
) STORED,
"status" text DEFAULT 'open' NOT NULL,
"mitigation" text,
"owner" text,
"decision_id" uuid,
"review_due_at" timestamp,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "projects" (
"id" uuid DEFAULT gen_random_uuid() PRIMARY KEY NOT NULL,
"tenant_id" uuid NOT NULL,
"workspace_id" uuid,
"organization_id" uuid,
"name" text NOT NULL,
"description" text,
"status" text DEFAULT 'planning' NOT NULL,
"priority" text DEFAULT 'medium' NOT NULL,
"start_date" date,
"due_date" date,
"budget_minor_units" bigint,
"currency" text DEFAULT 'RON',
"tags" text[] DEFAULT '{}' NOT NULL,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL,
"deleted_at" timestamp
);