Files
iistwin/migrations/0000_baseline.sql
Ильяс Султанов 1f5ecb6da4 fix(number-fields): избегаем потери точности длинных чисел
- number-поля теперь рендерятся как text + inputMode=numeric,
  чтобы браузер не округлял значения через input type=number
- пробелы при вставке в number-поля удаляются
- бэкенд нормализует значения number-полей в строку перед сохранением
- добавлен хелпер normalizeFieldValueForStorage

Closes: искажение расчётного счёта и других длинных числовых полей
2026-07-07 21:03:40 +03:00

1593 lines
86 KiB
SQL

-- Full schema baseline (idempotent)
-- Safe to run on any database: new or already-initialised
-- Requires pgvector extension for rag_embeddings.embedding column
CREATE EXTENSION IF NOT EXISTS vector;
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "automations" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"description" text,
"code" text DEFAULT '' NOT NULL,
"trigger" varchar(50) DEFAULT 'manual' NOT NULL,
"trigger_config" jsonb,
"is_active" boolean DEFAULT true,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "billing_transactions" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"amount" numeric(10, 2) NOT NULL,
"type" varchar(10) NOT NULL,
"description" text,
"created_at" timestamp DEFAULT now(),
"created_by" integer
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "bookmark_folders" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"user_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"parent_id" integer,
"position" integer DEFAULT 0 NOT NULL,
"is_expanded" boolean DEFAULT true,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "bookmarks" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"user_id" integer NOT NULL,
"folder_id" integer,
"name" varchar(200) NOT NULL,
"type" varchar(50) NOT NULL,
"target_id" integer,
"form_id" integer,
"url" varchar(1000),
"icon" varchar(100),
"position" integer DEFAULT 0 NOT NULL,
"view_config" jsonb,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "bot_sessions" (
"id" serial PRIMARY KEY NOT NULL,
"bot_id" integer NOT NULL,
"refresh_token" varchar(500) NOT NULL,
"expires_at" timestamp NOT NULL,
"created_at" timestamp DEFAULT now(),
"ip_address" varchar(45),
"user_agent" text,
CONSTRAINT "bot_sessions_refresh_token_unique" UNIQUE("refresh_token")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "bot_subscriptions" (
"id" serial PRIMARY KEY NOT NULL,
"bot_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"subscription_type" varchar(20) NOT NULL,
"form_id" integer,
"status_id" integer,
"transition_id" integer,
"events" jsonb DEFAULT '["comment","field_change","status_change"]'::jsonb NOT NULL,
"filters" jsonb,
"is_active" boolean DEFAULT true,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "bots" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"description" text,
"avatar_url" varchar(500),
"login" varchar(100) NOT NULL,
"password_hash" varchar(255) NOT NULL,
"webhook_url" varchar(1000),
"webhook_secret" varchar(255),
"webhook_enabled" boolean DEFAULT true,
"is_active" boolean DEFAULT true,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "bots_organization_id_login_unique" UNIQUE("organization_id","login")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "conversation_members" (
"id" serial PRIMARY KEY NOT NULL,
"conversation_id" integer NOT NULL,
"user_id" integer NOT NULL,
"joined_at" timestamp DEFAULT now(),
"last_read_at" timestamp,
"external_org_id" integer,
CONSTRAINT "conversation_members_conv_user_key" UNIQUE("conversation_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "conversation_messages" (
"id" serial PRIMARY KEY NOT NULL,
"conversation_id" integer NOT NULL,
"author_id" integer NOT NULL,
"message" text DEFAULT '' NOT NULL,
"reply_to_id" integer,
"mentioned_user_ids" jsonb,
"attachments" jsonb,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"is_deleted" boolean DEFAULT false
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "conversations" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"type" varchar(10) DEFAULT 'direct' NOT NULL,
"name" varchar(200),
"created_by" integer NOT NULL,
"is_default" boolean DEFAULT false,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "custom_pages" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"slug" varchar(100) NOT NULL,
"description" text,
"code" text DEFAULT '' NOT NULL,
"form_ids" integer[] DEFAULT '{}',
"icon" varchar(50) DEFAULT 'FileCode',
"is_active" boolean DEFAULT true,
"show_in_sidebar" boolean DEFAULT false,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "custom_pages_org_slug_unique" UNIQUE("organization_id","slug")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "custom_tab_modules" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"type" varchar(100) NOT NULL,
"label" varchar(200) NOT NULL,
"icon" varchar(50) DEFAULT 'Puzzle',
"description" text,
"config" jsonb NOT NULL,
"input_schema" jsonb,
"is_active" boolean DEFAULT true,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "custom_tab_modules_organization_id_type_key" UNIQUE("organization_id","type")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "data_table_permissions" (
"id" serial PRIMARY KEY NOT NULL,
"table_id" integer NOT NULL,
"user_id" integer NOT NULL,
"role" varchar(20) NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "data_table_permissions_table_id_user_id_unique" UNIQUE("table_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "data_table_rows" (
"id" serial PRIMARY KEY NOT NULL,
"table_id" integer NOT NULL,
"values" jsonb NOT NULL,
"position" integer DEFAULT 0 NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"is_deleted" boolean DEFAULT false
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "data_tables" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"description" text,
"columns" jsonb NOT NULL,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"is_deleted" boolean DEFAULT false
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "device_tokens" (
"id" serial PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"token" text NOT NULL,
"platform" varchar(20) NOT NULL,
"device_info" jsonb,
"last_active_at" timestamp DEFAULT now(),
"created_at" timestamp DEFAULT now(),
CONSTRAINT "device_tokens_user_id_token_key" UNIQUE("user_id","token")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "external_services" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"service_type" varchar(50) NOT NULL,
"service_name" varchar(200) NOT NULL,
"api_key" text,
"secret_key" text,
"config" jsonb,
"is_active" boolean DEFAULT true,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "external_services_organization_id_service_type_key" UNIQUE("organization_id","service_type")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "field_history" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"field_id" integer NOT NULL,
"form_id" integer NOT NULL,
"old_value" jsonb,
"new_value" jsonb,
"changed_by" integer NOT NULL,
"changed_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "form_fields" (
"id" serial PRIMARY KEY NOT NULL,
"form_id" integer NOT NULL,
"tab_id" integer,
"name" varchar(200) NOT NULL,
"code" varchar(100) NOT NULL,
"type" varchar(50) NOT NULL,
"is_required" boolean DEFAULT false,
"placeholder" text,
"default_value" text,
"validation_rules" jsonb,
"options" jsonb,
"position" integer DEFAULT 0 NOT NULL,
"linked_form_id" integer,
"button_action_type" varchar(20),
"button_url" text,
"button_form_id" integer,
"company_autofill" jsonb,
"task_relation_type" varchar(10),
"max_file_count" integer,
"max_file_size_mb" integer,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "form_fields_form_id_code_unique" UNIQUE("form_id","code"),
CONSTRAINT "form_fields_id_form_id_unique" UNIQUE("id","form_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "form_statuses" (
"id" serial PRIMARY KEY NOT NULL,
"form_id" integer NOT NULL,
"name" varchar(100) NOT NULL,
"color" varchar(7) DEFAULT '#e5e7eb' NOT NULL,
"position" integer DEFAULT 0 NOT NULL,
"is_initial" boolean DEFAULT false,
"is_final" boolean DEFAULT false,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "form_statuses_id_form_id_unique" UNIQUE("id","form_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "form_tabs" (
"id" serial PRIMARY KEY NOT NULL,
"form_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"code" varchar(100) NOT NULL,
"type" varchar(20) DEFAULT 'fields' NOT NULL,
"position" integer DEFAULT 0 NOT NULL,
"table_columns" jsonb,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "form_tabs_form_id_code_unique" UNIQUE("form_id","code")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "forms" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"description" text,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"is_active" boolean DEFAULT true,
"chat_layout" varchar(20) DEFAULT 'default',
"chat_enabled" boolean DEFAULT true,
"system_fields_tab_id" integer,
"default_tab_id" integer,
"detail_layout_code" text,
"title_template" text,
"hidden_system_fields" text[] DEFAULT '{}'::text[],
"ai_summary" text
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "global_fields" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"code" varchar(100) NOT NULL,
"name" varchar(200) NOT NULL,
"type" varchar(50) NOT NULL,
"options" jsonb,
"default_value" text,
"is_required" boolean DEFAULT false,
"placeholder" text,
"description" text,
"validation_rules" jsonb,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "global_fields_organization_id_code_key" UNIQUE("organization_id","code")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "invitations" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"email" varchar(255) NOT NULL,
"token" varchar(64) NOT NULL,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"expires_at" timestamp NOT NULL,
"used_at" timestamp,
CONSTRAINT "invitations_token_key" UNIQUE("token")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "message_reactions" (
"id" serial PRIMARY KEY NOT NULL,
"task_message_id" integer,
"conv_message_id" integer,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"emoji" varchar(10) NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "mr_task_user_emoji_key" UNIQUE("task_message_id","user_id","emoji"),
CONSTRAINT "mr_conv_user_emoji_key" UNIQUE("conv_message_id","user_id","emoji")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "message_reads" (
"id" serial PRIMARY KEY NOT NULL,
"message_id" integer NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"read_at" timestamp DEFAULT now(),
CONSTRAINT "message_reads_unique" UNIQUE("message_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "notification_event_types" (
"id" serial PRIMARY KEY NOT NULL,
"code" varchar(100) NOT NULL,
"name" varchar(200) NOT NULL,
"description" text,
"category" varchar(50) NOT NULL,
"is_active" boolean DEFAULT true,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "notification_event_types_code_unique" UNIQUE("code")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "notification_subscriptions" (
"id" serial PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"event_type_code" varchar(100) NOT NULL,
"target_type" varchar(50),
"target_id" integer,
"channels" jsonb DEFAULT '["app", "email"]'::jsonb,
"is_active" boolean DEFAULT true,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "notification_subscriptions_user_id_event_type_code_target_type_" UNIQUE("user_id","event_type_code","target_type","target_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "org_connections" (
"id" serial PRIMARY KEY NOT NULL,
"initiator_org_id" integer NOT NULL,
"partner_org_id" integer,
"status" varchar(20) DEFAULT 'pending' NOT NULL,
"token" varchar(64) NOT NULL,
"created_at" timestamp DEFAULT now(),
"accepted_at" timestamp,
CONSTRAINT "org_connections_token_unique" UNIQUE("token")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "organization_api_keys" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"key_hash" varchar(64) NOT NULL,
"key_prefix" varchar(16) NOT NULL,
"label" varchar(100) DEFAULT 'Default' NOT NULL,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"last_used_at" timestamp,
"is_active" boolean DEFAULT true NOT NULL,
CONSTRAINT "organization_api_keys_key_hash_key" UNIQUE("key_hash")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "organization_billing" (
"organization_id" integer PRIMARY KEY NOT NULL,
"price_per_user" numeric(10, 2) DEFAULT '0' NOT NULL,
"balance" numeric(10, 2) DEFAULT '0' NOT NULL,
"currency" varchar(10) DEFAULT 'RUB' NOT NULL,
"next_billing_date" date,
"blocked_at" timestamp,
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "organizations" (
"id" serial PRIMARY KEY NOT NULL,
"name" varchar(100) NOT NULL,
"slug" varchar(50) NOT NULL,
"display_name" varchar(200) NOT NULL,
"logo_url" varchar(500),
"theme_color" varchar(7) DEFAULT '#1976d2',
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"is_active" boolean DEFAULT true,
"billing_blocked" boolean DEFAULT false,
CONSTRAINT "organizations_name_unique" UNIQUE("name"),
CONSTRAINT "organizations_slug_unique" UNIQUE("slug")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "poll_votes" (
"id" serial PRIMARY KEY NOT NULL,
"poll_id" integer NOT NULL,
"user_id" integer NOT NULL,
"option_indexes" integer[] DEFAULT '{}' NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "poll_votes_poll_user_key" UNIQUE("poll_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "polls" (
"id" serial PRIMARY KEY NOT NULL,
"task_message_id" integer,
"conv_message_id" integer,
"organization_id" integer NOT NULL,
"question" text NOT NULL,
"options" jsonb DEFAULT '[]'::jsonb NOT NULL,
"is_multiple" boolean DEFAULT false,
"is_closed" boolean DEFAULT false,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "rag_embeddings" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"entity_type" varchar(20) NOT NULL,
"entity_id" integer NOT NULL,
"content" text NOT NULL,
"embedding" vector(1536),
"metadata" jsonb DEFAULT '{}'::jsonb,
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "rag_embeddings_org_entity_type_id_key" UNIQUE("organization_id","entity_type","entity_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "regular_table_rows" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"tab_id" integer NOT NULL,
"position" integer DEFAULT 0 NOT NULL,
"data" jsonb DEFAULT '{}'::jsonb NOT NULL,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_by" integer,
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "role_members" (
"id" serial PRIMARY KEY NOT NULL,
"role_id" integer NOT NULL,
"user_id" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "role_members_role_user_key" UNIQUE("role_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "roles" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"name" varchar(100) NOT NULL,
"description" text,
"parent_id" integer,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "status_transitions" (
"id" serial PRIMARY KEY NOT NULL,
"form_id" integer NOT NULL,
"from_status_id" integer NOT NULL,
"to_status_id" integer NOT NULL,
"reject_to_status_id" integer,
"action_type" varchar(20) DEFAULT 'approve' NOT NULL,
"action_name" varchar(100),
"conditions" jsonb,
"required_role" varchar(20),
"assignee_user_id" integer,
"assignee_conditions" jsonb,
"approve_button_text" varchar(50) DEFAULT 'Одобрить',
"approve_button_color" varchar(7) DEFAULT '#22c55e',
"reject_button_text" varchar(50) DEFAULT 'Отклонить',
"reject_button_color" varchar(7) DEFAULT '#ef4444',
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "super_admins" (
"id" serial PRIMARY KEY NOT NULL,
"email" varchar(255) NOT NULL,
"password_hash" varchar(255) NOT NULL,
"name" varchar(200) NOT NULL,
"created_at" timestamp DEFAULT now(),
"last_login" timestamp,
CONSTRAINT "super_admins_email_key" UNIQUE("email")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "system_audit_log" (
"id" serial PRIMARY KEY NOT NULL,
"action" varchar(100) NOT NULL,
"user_id" integer,
"organization_id" integer,
"task_id" integer,
"details" jsonb,
"ip" varchar(45),
"user_agent" text,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_assignees" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "task_assignees_task_user_key" UNIQUE("task_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_audit_log" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"action" varchar(50) NOT NULL,
"field_id" integer,
"field_name" text,
"old_value" jsonb,
"new_value" jsonb,
"changed_by" integer,
"changed_by_name" text,
"metadata" jsonb,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_field_values" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"field_id" integer NOT NULL,
"form_id" integer NOT NULL,
"value" jsonb,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "task_field_values_task_id_field_id_unique" UNIQUE("task_id","field_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_messages" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"form_id" integer NOT NULL,
"author_id" integer,
"bot_id" integer,
"reply_to_message_id" integer,
"message" text DEFAULT '' NOT NULL,
"message_type" varchar(20) DEFAULT 'comment' NOT NULL,
"mentioned_user_ids" jsonb,
"bot_buttons" jsonb,
"attachments" jsonb,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_relations" (
"id" serial PRIMARY KEY NOT NULL,
"parent_task_id" integer NOT NULL,
"child_task_id" integer NOT NULL,
"field_id" integer,
"organization_id" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "task_relations_parent_task_id_child_task_id_field_id_key" UNIQUE("parent_task_id","child_task_id","field_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_reminders" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"created_by_user_id" integer NOT NULL,
"remind_at" timestamp NOT NULL,
"note" text,
"recipients" jsonb DEFAULT '[]'::jsonb NOT NULL,
"is_sent" boolean DEFAULT false,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_roles" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"role_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "task_roles_task_role_key" UNIQUE("task_id","role_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_tab_values" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"tab_id" integer NOT NULL,
"values" jsonb DEFAULT '{}'::jsonb NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "task_tab_values_task_id_tab_id_key" UNIQUE("task_id","tab_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_table_cell_history" (
"id" serial PRIMARY KEY NOT NULL,
"cell_id" integer NOT NULL,
"table_id" integer NOT NULL,
"row_index" integer NOT NULL,
"col_index" integer NOT NULL,
"prev_value" text,
"prev_formula" text,
"new_value" text,
"new_formula" text,
"changed_by" integer,
"changed_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_table_cells" (
"id" serial PRIMARY KEY NOT NULL,
"table_id" integer NOT NULL,
"row_index" integer NOT NULL,
"col_index" integer NOT NULL,
"value" text,
"formula" text,
"updated_by" integer,
"updated_at" timestamp DEFAULT now(),
CONSTRAINT "task_table_cells_table_id_row_index_col_index_key" UNIQUE("table_id","row_index","col_index")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_tables" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"tab_id" integer,
"name" varchar(200) NOT NULL,
"columns" jsonb,
"created_by" integer,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "task_user_access" (
"id" serial PRIMARY KEY NOT NULL,
"task_id" integer NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"granted_via" varchar(20) DEFAULT 'direct' NOT NULL,
"role_id" integer,
"first_interaction_at" timestamp DEFAULT now(),
"revoked_at" timestamp,
CONSTRAINT "task_user_access_task_user_key" UNIQUE("task_id","user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "tasks" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer,
"form_id" integer NOT NULL,
"title" varchar(500) NOT NULL,
"description" text,
"current_status_id" integer NOT NULL,
"assigned_to" integer,
"created_by" integer NOT NULL,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now(),
"completed_at" timestamp,
"is_completed" boolean DEFAULT false,
"due_date" timestamp,
"parent_task_id" integer,
"depth" integer DEFAULT 0,
"position" integer DEFAULT 0,
CONSTRAINT "tasks_id_form_id_unique" UNIQUE("id","form_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "user_custom_fields" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"name" varchar(200) NOT NULL,
"code" varchar(100) NOT NULL,
"type" varchar(50) NOT NULL,
"options" jsonb,
"is_required" boolean DEFAULT false,
"position" integer DEFAULT 0,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "user_custom_values" (
"id" serial PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"field_id" integer NOT NULL,
"value" text,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "user_notifications" (
"id" serial PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"type" varchar(50) NOT NULL,
"title" varchar(200) NOT NULL,
"message" text NOT NULL,
"task_id" integer,
"message_id" integer,
"is_read" boolean DEFAULT false,
"created_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "user_presence" (
"id" serial PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"is_online" boolean DEFAULT false,
"last_seen_at" timestamp DEFAULT now(),
"active_devices" integer DEFAULT 0,
CONSTRAINT "user_presence_user_id_key" UNIQUE("user_id")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "user_sessions" (
"id" serial PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"refresh_token" varchar(500) NOT NULL,
"expires_at" timestamp NOT NULL,
"created_at" timestamp DEFAULT now(),
"ip_address" varchar(45),
"user_agent" text,
CONSTRAINT "user_sessions_refresh_token_unique" UNIQUE("refresh_token")
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "users" (
"id" serial PRIMARY KEY NOT NULL,
"organization_id" integer NOT NULL,
"email" varchar(255) NOT NULL,
"password_hash" varchar(255) NOT NULL,
"first_name" varchar(100) NOT NULL,
"last_name" varchar(100) NOT NULL,
"position" varchar(200),
"role" varchar(20) DEFAULT 'user' NOT NULL,
"is_active" boolean DEFAULT true,
"email_verified" boolean DEFAULT false,
"verification_token" varchar(255),
"reset_password_token" varchar(255),
"reset_password_expires" timestamp,
"last_login" timestamp,
"created_at" timestamp DEFAULT now(),
"updated_at" timestamp DEFAULT now()
);
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "web_push_subscriptions" (
"id" serial PRIMARY KEY NOT NULL,
"user_id" integer NOT NULL,
"organization_id" integer NOT NULL,
"endpoint" text NOT NULL,
"subscription" text NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "web_push_subscriptions_endpoint_key" UNIQUE("endpoint")
);
--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'automations_organization_id_organizations_id_fk') THEN
ALTER TABLE "automations" ADD CONSTRAINT "automations_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'automations_created_by_users_id_fk') THEN
ALTER TABLE "automations" ADD CONSTRAINT "automations_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'billing_transactions_organization_id_organizations_id_fk') THEN
ALTER TABLE "billing_transactions" ADD CONSTRAINT "billing_transactions_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmark_folders_organization_id_organizations_id_fk') THEN
ALTER TABLE "bookmark_folders" ADD CONSTRAINT "bookmark_folders_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmark_folders_user_id_users_id_fk') THEN
ALTER TABLE "bookmark_folders" ADD CONSTRAINT "bookmark_folders_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmark_folders_created_by_users_id_fk') THEN
ALTER TABLE "bookmark_folders" ADD CONSTRAINT "bookmark_folders_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmarks_organization_id_organizations_id_fk') THEN
ALTER TABLE "bookmarks" ADD CONSTRAINT "bookmarks_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmarks_user_id_users_id_fk') THEN
ALTER TABLE "bookmarks" ADD CONSTRAINT "bookmarks_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmarks_folder_id_bookmark_folders_id_fk') THEN
ALTER TABLE "bookmarks" ADD CONSTRAINT "bookmarks_folder_id_bookmark_folders_id_fk" FOREIGN KEY ("folder_id") REFERENCES "public"."bookmark_folders"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmarks_form_id_forms_id_fk') THEN
ALTER TABLE "bookmarks" ADD CONSTRAINT "bookmarks_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bookmarks_created_by_users_id_fk') THEN
ALTER TABLE "bookmarks" ADD CONSTRAINT "bookmarks_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bot_sessions_bot_id_bots_id_fk') THEN
ALTER TABLE "bot_sessions" ADD CONSTRAINT "bot_sessions_bot_id_bots_id_fk" FOREIGN KEY ("bot_id") REFERENCES "public"."bots"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bot_subscriptions_bot_id_bots_id_fk') THEN
ALTER TABLE "bot_subscriptions" ADD CONSTRAINT "bot_subscriptions_bot_id_bots_id_fk" FOREIGN KEY ("bot_id") REFERENCES "public"."bots"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bot_subscriptions_organization_id_organizations_id_fk') THEN
ALTER TABLE "bot_subscriptions" ADD CONSTRAINT "bot_subscriptions_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bot_subscriptions_form_id_forms_id_fk') THEN
ALTER TABLE "bot_subscriptions" ADD CONSTRAINT "bot_subscriptions_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bot_subscriptions_status_id_form_statuses_id_fk') THEN
ALTER TABLE "bot_subscriptions" ADD CONSTRAINT "bot_subscriptions_status_id_form_statuses_id_fk" FOREIGN KEY ("status_id") REFERENCES "public"."form_statuses"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bot_subscriptions_transition_id_status_transitions_id_fk') THEN
ALTER TABLE "bot_subscriptions" ADD CONSTRAINT "bot_subscriptions_transition_id_status_transitions_id_fk" FOREIGN KEY ("transition_id") REFERENCES "public"."status_transitions"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bots_organization_id_organizations_id_fk') THEN
ALTER TABLE "bots" ADD CONSTRAINT "bots_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'bots_created_by_users_id_fk') THEN
ALTER TABLE "bots" ADD CONSTRAINT "bots_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'conversation_members_conversation_id_conversations_id_fk') THEN
ALTER TABLE "conversation_members" ADD CONSTRAINT "conversation_members_conversation_id_conversations_id_fk" FOREIGN KEY ("conversation_id") REFERENCES "public"."conversations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'conversation_members_user_id_users_id_fk') THEN
ALTER TABLE "conversation_members" ADD CONSTRAINT "conversation_members_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'conversation_messages_conversation_id_conversations_id_fk') THEN
ALTER TABLE "conversation_messages" ADD CONSTRAINT "conversation_messages_conversation_id_conversations_id_fk" FOREIGN KEY ("conversation_id") REFERENCES "public"."conversations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'conversation_messages_author_id_users_id_fk') THEN
ALTER TABLE "conversation_messages" ADD CONSTRAINT "conversation_messages_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'conversations_organization_id_organizations_id_fk') THEN
ALTER TABLE "conversations" ADD CONSTRAINT "conversations_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'conversations_created_by_users_id_fk') THEN
ALTER TABLE "conversations" ADD CONSTRAINT "conversations_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_pages_organization_id_organizations_id_fk') THEN
ALTER TABLE "custom_pages" ADD CONSTRAINT "custom_pages_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_pages_created_by_users_id_fk') THEN
ALTER TABLE "custom_pages" ADD CONSTRAINT "custom_pages_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_tab_modules_organization_id_organizations_id_fk') THEN
ALTER TABLE "custom_tab_modules" ADD CONSTRAINT "custom_tab_modules_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'custom_tab_modules_created_by_users_id_fk') THEN
ALTER TABLE "custom_tab_modules" ADD CONSTRAINT "custom_tab_modules_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'data_table_permissions_table_id_data_tables_id_fk') THEN
ALTER TABLE "data_table_permissions" ADD CONSTRAINT "data_table_permissions_table_id_data_tables_id_fk" FOREIGN KEY ("table_id") REFERENCES "public"."data_tables"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'data_table_permissions_user_id_users_id_fk') THEN
ALTER TABLE "data_table_permissions" ADD CONSTRAINT "data_table_permissions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'data_table_rows_table_id_data_tables_id_fk') THEN
ALTER TABLE "data_table_rows" ADD CONSTRAINT "data_table_rows_table_id_data_tables_id_fk" FOREIGN KEY ("table_id") REFERENCES "public"."data_tables"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'data_tables_organization_id_organizations_id_fk') THEN
ALTER TABLE "data_tables" ADD CONSTRAINT "data_tables_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'data_tables_created_by_users_id_fk') THEN
ALTER TABLE "data_tables" ADD CONSTRAINT "data_tables_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'device_tokens_user_id_users_id_fk') THEN
ALTER TABLE "device_tokens" ADD CONSTRAINT "device_tokens_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'device_tokens_organization_id_organizations_id_fk') THEN
ALTER TABLE "device_tokens" ADD CONSTRAINT "device_tokens_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'external_services_organization_id_organizations_id_fk') THEN
ALTER TABLE "external_services" ADD CONSTRAINT "external_services_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'field_history_task_id_tasks_id_fk') THEN
ALTER TABLE "field_history" ADD CONSTRAINT "field_history_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'field_history_field_id_form_fields_id_fk') THEN
ALTER TABLE "field_history" ADD CONSTRAINT "field_history_field_id_form_fields_id_fk" FOREIGN KEY ("field_id") REFERENCES "public"."form_fields"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'field_history_form_id_forms_id_fk') THEN
ALTER TABLE "field_history" ADD CONSTRAINT "field_history_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'field_history_changed_by_users_id_fk') THEN
ALTER TABLE "field_history" ADD CONSTRAINT "field_history_changed_by_users_id_fk" FOREIGN KEY ("changed_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_field_history_task_same_form') THEN
ALTER TABLE "field_history" ADD CONSTRAINT "fk_field_history_task_same_form" FOREIGN KEY ("task_id","form_id") REFERENCES "public"."tasks"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_field_history_field_same_form') THEN
ALTER TABLE "field_history" ADD CONSTRAINT "fk_field_history_field_same_form" FOREIGN KEY ("field_id","form_id") REFERENCES "public"."form_fields"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'form_fields_form_id_forms_id_fk') THEN
ALTER TABLE "form_fields" ADD CONSTRAINT "form_fields_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'form_fields_tab_id_form_tabs_id_fk') THEN
ALTER TABLE "form_fields" ADD CONSTRAINT "form_fields_tab_id_form_tabs_id_fk" FOREIGN KEY ("tab_id") REFERENCES "public"."form_tabs"("id") ON DELETE set null ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'form_fields_linked_form_id_forms_id_fk') THEN
ALTER TABLE "form_fields" ADD CONSTRAINT "form_fields_linked_form_id_forms_id_fk" FOREIGN KEY ("linked_form_id") REFERENCES "public"."forms"("id") ON DELETE set null ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'form_fields_button_form_id_forms_id_fk') THEN
ALTER TABLE "form_fields" ADD CONSTRAINT "form_fields_button_form_id_forms_id_fk" FOREIGN KEY ("button_form_id") REFERENCES "public"."forms"("id") ON DELETE set null ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'form_statuses_form_id_forms_id_fk') THEN
ALTER TABLE "form_statuses" ADD CONSTRAINT "form_statuses_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'form_tabs_form_id_forms_id_fk') THEN
ALTER TABLE "form_tabs" ADD CONSTRAINT "form_tabs_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'forms_organization_id_organizations_id_fk') THEN
ALTER TABLE "forms" ADD CONSTRAINT "forms_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'forms_created_by_users_id_fk') THEN
ALTER TABLE "forms" ADD CONSTRAINT "forms_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'global_fields_organization_id_organizations_id_fk') THEN
ALTER TABLE "global_fields" ADD CONSTRAINT "global_fields_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'global_fields_created_by_users_id_fk') THEN
ALTER TABLE "global_fields" ADD CONSTRAINT "global_fields_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'invitations_organization_id_organizations_id_fk') THEN
ALTER TABLE "invitations" ADD CONSTRAINT "invitations_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'invitations_created_by_users_id_fk') THEN
ALTER TABLE "invitations" ADD CONSTRAINT "invitations_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_reactions_task_message_id_task_messages_id_fk') THEN
ALTER TABLE "message_reactions" ADD CONSTRAINT "message_reactions_task_message_id_task_messages_id_fk" FOREIGN KEY ("task_message_id") REFERENCES "public"."task_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_reactions_conv_message_id_conversation_messages_id_fk') THEN
ALTER TABLE "message_reactions" ADD CONSTRAINT "message_reactions_conv_message_id_conversation_messages_id_fk" FOREIGN KEY ("conv_message_id") REFERENCES "public"."conversation_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_reactions_user_id_users_id_fk') THEN
ALTER TABLE "message_reactions" ADD CONSTRAINT "message_reactions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_reactions_organization_id_organizations_id_fk') THEN
ALTER TABLE "message_reactions" ADD CONSTRAINT "message_reactions_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_reads_message_id_task_messages_id_fk') THEN
ALTER TABLE "message_reads" ADD CONSTRAINT "message_reads_message_id_task_messages_id_fk" FOREIGN KEY ("message_id") REFERENCES "public"."task_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_reads_user_id_users_id_fk') THEN
ALTER TABLE "message_reads" ADD CONSTRAINT "message_reads_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'message_reads_organization_id_organizations_id_fk') THEN
ALTER TABLE "message_reads" ADD CONSTRAINT "message_reads_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'notification_subscriptions_user_id_users_id_fk') THEN
ALTER TABLE "notification_subscriptions" ADD CONSTRAINT "notification_subscriptions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'notification_subscriptions_organization_id_organizations_id_fk') THEN
ALTER TABLE "notification_subscriptions" ADD CONSTRAINT "notification_subscriptions_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'org_connections_initiator_org_id_organizations_id_fk') THEN
ALTER TABLE "org_connections" ADD CONSTRAINT "org_connections_initiator_org_id_organizations_id_fk" FOREIGN KEY ("initiator_org_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'org_connections_partner_org_id_organizations_id_fk') THEN
ALTER TABLE "org_connections" ADD CONSTRAINT "org_connections_partner_org_id_organizations_id_fk" FOREIGN KEY ("partner_org_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'organization_api_keys_organization_id_organizations_id_fk') THEN
ALTER TABLE "organization_api_keys" ADD CONSTRAINT "organization_api_keys_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'organization_api_keys_created_by_users_id_fk') THEN
ALTER TABLE "organization_api_keys" ADD CONSTRAINT "organization_api_keys_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'organization_billing_organization_id_organizations_id_fk') THEN
ALTER TABLE "organization_billing" ADD CONSTRAINT "organization_billing_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'poll_votes_poll_id_polls_id_fk') THEN
ALTER TABLE "poll_votes" ADD CONSTRAINT "poll_votes_poll_id_polls_id_fk" FOREIGN KEY ("poll_id") REFERENCES "public"."polls"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'poll_votes_user_id_users_id_fk') THEN
ALTER TABLE "poll_votes" ADD CONSTRAINT "poll_votes_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'polls_task_message_id_task_messages_id_fk') THEN
ALTER TABLE "polls" ADD CONSTRAINT "polls_task_message_id_task_messages_id_fk" FOREIGN KEY ("task_message_id") REFERENCES "public"."task_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'polls_conv_message_id_conversation_messages_id_fk') THEN
ALTER TABLE "polls" ADD CONSTRAINT "polls_conv_message_id_conversation_messages_id_fk" FOREIGN KEY ("conv_message_id") REFERENCES "public"."conversation_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'polls_organization_id_organizations_id_fk') THEN
ALTER TABLE "polls" ADD CONSTRAINT "polls_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'polls_created_by_users_id_fk') THEN
ALTER TABLE "polls" ADD CONSTRAINT "polls_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'rag_embeddings_organization_id_organizations_id_fk') THEN
ALTER TABLE "rag_embeddings" ADD CONSTRAINT "rag_embeddings_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'regular_table_rows_task_id_tasks_id_fk') THEN
ALTER TABLE "regular_table_rows" ADD CONSTRAINT "regular_table_rows_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'regular_table_rows_tab_id_form_tabs_id_fk') THEN
ALTER TABLE "regular_table_rows" ADD CONSTRAINT "regular_table_rows_tab_id_form_tabs_id_fk" FOREIGN KEY ("tab_id") REFERENCES "public"."form_tabs"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'regular_table_rows_created_by_users_id_fk') THEN
ALTER TABLE "regular_table_rows" ADD CONSTRAINT "regular_table_rows_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'regular_table_rows_updated_by_users_id_fk') THEN
ALTER TABLE "regular_table_rows" ADD CONSTRAINT "regular_table_rows_updated_by_users_id_fk" FOREIGN KEY ("updated_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'role_members_role_id_roles_id_fk') THEN
ALTER TABLE "role_members" ADD CONSTRAINT "role_members_role_id_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'role_members_user_id_users_id_fk') THEN
ALTER TABLE "role_members" ADD CONSTRAINT "role_members_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'roles_organization_id_organizations_id_fk') THEN
ALTER TABLE "roles" ADD CONSTRAINT "roles_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'status_transitions_form_id_forms_id_fk') THEN
ALTER TABLE "status_transitions" ADD CONSTRAINT "status_transitions_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'status_transitions_from_status_id_form_statuses_id_fk') THEN
ALTER TABLE "status_transitions" ADD CONSTRAINT "status_transitions_from_status_id_form_statuses_id_fk" FOREIGN KEY ("from_status_id") REFERENCES "public"."form_statuses"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'status_transitions_to_status_id_form_statuses_id_fk') THEN
ALTER TABLE "status_transitions" ADD CONSTRAINT "status_transitions_to_status_id_form_statuses_id_fk" FOREIGN KEY ("to_status_id") REFERENCES "public"."form_statuses"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'status_transitions_reject_to_status_id_form_statuses_id_fk') THEN
ALTER TABLE "status_transitions" ADD CONSTRAINT "status_transitions_reject_to_status_id_form_statuses_id_fk" FOREIGN KEY ("reject_to_status_id") REFERENCES "public"."form_statuses"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'status_transitions_assignee_user_id_users_id_fk') THEN
ALTER TABLE "status_transitions" ADD CONSTRAINT "status_transitions_assignee_user_id_users_id_fk" FOREIGN KEY ("assignee_user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_transition_from_status_same_form') THEN
ALTER TABLE "status_transitions" ADD CONSTRAINT "fk_transition_from_status_same_form" FOREIGN KEY ("from_status_id","form_id") REFERENCES "public"."form_statuses"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_transition_to_status_same_form') THEN
ALTER TABLE "status_transitions" ADD CONSTRAINT "fk_transition_to_status_same_form" FOREIGN KEY ("to_status_id","form_id") REFERENCES "public"."form_statuses"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'system_audit_log_user_id_users_id_fk') THEN
ALTER TABLE "system_audit_log" ADD CONSTRAINT "system_audit_log_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'system_audit_log_organization_id_organizations_id_fk') THEN
ALTER TABLE "system_audit_log" ADD CONSTRAINT "system_audit_log_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE set null ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_assignees_task_id_tasks_id_fk') THEN
ALTER TABLE "task_assignees" ADD CONSTRAINT "task_assignees_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_assignees_user_id_users_id_fk') THEN
ALTER TABLE "task_assignees" ADD CONSTRAINT "task_assignees_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_assignees_organization_id_organizations_id_fk') THEN
ALTER TABLE "task_assignees" ADD CONSTRAINT "task_assignees_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_audit_log_task_id_tasks_id_fk') THEN
ALTER TABLE "task_audit_log" ADD CONSTRAINT "task_audit_log_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_audit_log_organization_id_organizations_id_fk') THEN
ALTER TABLE "task_audit_log" ADD CONSTRAINT "task_audit_log_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_audit_log_changed_by_users_id_fk') THEN
ALTER TABLE "task_audit_log" ADD CONSTRAINT "task_audit_log_changed_by_users_id_fk" FOREIGN KEY ("changed_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_field_values_task_id_tasks_id_fk') THEN
ALTER TABLE "task_field_values" ADD CONSTRAINT "task_field_values_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_field_values_field_id_form_fields_id_fk') THEN
ALTER TABLE "task_field_values" ADD CONSTRAINT "task_field_values_field_id_form_fields_id_fk" FOREIGN KEY ("field_id") REFERENCES "public"."form_fields"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_field_values_form_id_forms_id_fk') THEN
ALTER TABLE "task_field_values" ADD CONSTRAINT "task_field_values_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_task_field_value_task_same_form') THEN
ALTER TABLE "task_field_values" ADD CONSTRAINT "fk_task_field_value_task_same_form" FOREIGN KEY ("task_id","form_id") REFERENCES "public"."tasks"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_task_field_value_field_same_form') THEN
ALTER TABLE "task_field_values" ADD CONSTRAINT "fk_task_field_value_field_same_form" FOREIGN KEY ("field_id","form_id") REFERENCES "public"."form_fields"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_messages_task_id_tasks_id_fk') THEN
ALTER TABLE "task_messages" ADD CONSTRAINT "task_messages_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_messages_form_id_forms_id_fk') THEN
ALTER TABLE "task_messages" ADD CONSTRAINT "task_messages_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_messages_author_id_users_id_fk') THEN
ALTER TABLE "task_messages" ADD CONSTRAINT "task_messages_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_messages_reply_to_message_id_task_messages_id_fk') THEN
ALTER TABLE "task_messages" ADD CONSTRAINT "task_messages_reply_to_message_id_task_messages_id_fk" FOREIGN KEY ("reply_to_message_id") REFERENCES "public"."task_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_task_message_task_same_form') THEN
ALTER TABLE "task_messages" ADD CONSTRAINT "fk_task_message_task_same_form" FOREIGN KEY ("task_id","form_id") REFERENCES "public"."tasks"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_relations_parent_task_id_tasks_id_fk') THEN
ALTER TABLE "task_relations" ADD CONSTRAINT "task_relations_parent_task_id_tasks_id_fk" FOREIGN KEY ("parent_task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_relations_child_task_id_tasks_id_fk') THEN
ALTER TABLE "task_relations" ADD CONSTRAINT "task_relations_child_task_id_tasks_id_fk" FOREIGN KEY ("child_task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_relations_field_id_form_fields_id_fk') THEN
ALTER TABLE "task_relations" ADD CONSTRAINT "task_relations_field_id_form_fields_id_fk" FOREIGN KEY ("field_id") REFERENCES "public"."form_fields"("id") ON DELETE set null ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_relations_organization_id_organizations_id_fk') THEN
ALTER TABLE "task_relations" ADD CONSTRAINT "task_relations_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_reminders_task_id_tasks_id_fk') THEN
ALTER TABLE "task_reminders" ADD CONSTRAINT "task_reminders_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_reminders_organization_id_organizations_id_fk') THEN
ALTER TABLE "task_reminders" ADD CONSTRAINT "task_reminders_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_reminders_created_by_user_id_users_id_fk') THEN
ALTER TABLE "task_reminders" ADD CONSTRAINT "task_reminders_created_by_user_id_users_id_fk" FOREIGN KEY ("created_by_user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_roles_task_id_tasks_id_fk') THEN
ALTER TABLE "task_roles" ADD CONSTRAINT "task_roles_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_roles_role_id_roles_id_fk') THEN
ALTER TABLE "task_roles" ADD CONSTRAINT "task_roles_role_id_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_roles_organization_id_organizations_id_fk') THEN
ALTER TABLE "task_roles" ADD CONSTRAINT "task_roles_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_tab_values_task_id_tasks_id_fk') THEN
ALTER TABLE "task_tab_values" ADD CONSTRAINT "task_tab_values_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_tab_values_tab_id_form_tabs_id_fk') THEN
ALTER TABLE "task_tab_values" ADD CONSTRAINT "task_tab_values_tab_id_form_tabs_id_fk" FOREIGN KEY ("tab_id") REFERENCES "public"."form_tabs"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_table_cell_history_cell_id_task_table_cells_id_fk') THEN
ALTER TABLE "task_table_cell_history" ADD CONSTRAINT "task_table_cell_history_cell_id_task_table_cells_id_fk" FOREIGN KEY ("cell_id") REFERENCES "public"."task_table_cells"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_table_cell_history_table_id_task_tables_id_fk') THEN
ALTER TABLE "task_table_cell_history" ADD CONSTRAINT "task_table_cell_history_table_id_task_tables_id_fk" FOREIGN KEY ("table_id") REFERENCES "public"."task_tables"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_table_cell_history_changed_by_users_id_fk') THEN
ALTER TABLE "task_table_cell_history" ADD CONSTRAINT "task_table_cell_history_changed_by_users_id_fk" FOREIGN KEY ("changed_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_table_cells_table_id_task_tables_id_fk') THEN
ALTER TABLE "task_table_cells" ADD CONSTRAINT "task_table_cells_table_id_task_tables_id_fk" FOREIGN KEY ("table_id") REFERENCES "public"."task_tables"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_table_cells_updated_by_users_id_fk') THEN
ALTER TABLE "task_table_cells" ADD CONSTRAINT "task_table_cells_updated_by_users_id_fk" FOREIGN KEY ("updated_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_tables_task_id_tasks_id_fk') THEN
ALTER TABLE "task_tables" ADD CONSTRAINT "task_tables_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_tables_tab_id_form_tabs_id_fk') THEN
ALTER TABLE "task_tables" ADD CONSTRAINT "task_tables_tab_id_form_tabs_id_fk" FOREIGN KEY ("tab_id") REFERENCES "public"."form_tabs"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_tables_created_by_users_id_fk') THEN
ALTER TABLE "task_tables" ADD CONSTRAINT "task_tables_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_user_access_task_id_tasks_id_fk') THEN
ALTER TABLE "task_user_access" ADD CONSTRAINT "task_user_access_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_user_access_user_id_users_id_fk') THEN
ALTER TABLE "task_user_access" ADD CONSTRAINT "task_user_access_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'task_user_access_organization_id_organizations_id_fk') THEN
ALTER TABLE "task_user_access" ADD CONSTRAINT "task_user_access_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'tasks_organization_id_organizations_id_fk') THEN
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'tasks_form_id_forms_id_fk') THEN
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'tasks_current_status_id_form_statuses_id_fk') THEN
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_current_status_id_form_statuses_id_fk" FOREIGN KEY ("current_status_id") REFERENCES "public"."form_statuses"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'tasks_assigned_to_users_id_fk') THEN
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_assigned_to_users_id_fk" FOREIGN KEY ("assigned_to") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'tasks_created_by_users_id_fk') THEN
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_task_status_same_form') THEN
ALTER TABLE "tasks" ADD CONSTRAINT "fk_task_status_same_form" FOREIGN KEY ("current_status_id","form_id") REFERENCES "public"."form_statuses"("id","form_id") ON DELETE no action ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_custom_fields_organization_id_organizations_id_fk') THEN
ALTER TABLE "user_custom_fields" ADD CONSTRAINT "user_custom_fields_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_custom_values_user_id_users_id_fk') THEN
ALTER TABLE "user_custom_values" ADD CONSTRAINT "user_custom_values_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_custom_values_field_id_user_custom_fields_id_fk') THEN
ALTER TABLE "user_custom_values" ADD CONSTRAINT "user_custom_values_field_id_user_custom_fields_id_fk" FOREIGN KEY ("field_id") REFERENCES "public"."user_custom_fields"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_notifications_user_id_users_id_fk') THEN
ALTER TABLE "user_notifications" ADD CONSTRAINT "user_notifications_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_notifications_organization_id_organizations_id_fk') THEN
ALTER TABLE "user_notifications" ADD CONSTRAINT "user_notifications_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_notifications_task_id_tasks_id_fk') THEN
ALTER TABLE "user_notifications" ADD CONSTRAINT "user_notifications_task_id_tasks_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."tasks"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_notifications_message_id_task_messages_id_fk') THEN
ALTER TABLE "user_notifications" ADD CONSTRAINT "user_notifications_message_id_task_messages_id_fk" FOREIGN KEY ("message_id") REFERENCES "public"."task_messages"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_presence_user_id_users_id_fk') THEN
ALTER TABLE "user_presence" ADD CONSTRAINT "user_presence_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_presence_organization_id_organizations_id_fk') THEN
ALTER TABLE "user_presence" ADD CONSTRAINT "user_presence_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'user_sessions_user_id_users_id_fk') THEN
ALTER TABLE "user_sessions" ADD CONSTRAINT "user_sessions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'users_organization_id_organizations_id_fk') THEN
ALTER TABLE "users" ADD CONSTRAINT "users_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'web_push_subscriptions_user_id_users_id_fk') THEN
ALTER TABLE "web_push_subscriptions" ADD CONSTRAINT "web_push_subscriptions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'web_push_subscriptions_organization_id_organizations_id_fk') THEN
ALTER TABLE "web_push_subscriptions" ADD CONSTRAINT "web_push_subscriptions_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;
END IF;
END $$;--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "automations_org_idx" ON "automations" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "conversation_members_conv_idx" ON "conversation_members" USING btree ("conversation_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "conversation_members_user_idx" ON "conversation_members" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "conv_messages_conv_created_idx" ON "conversation_messages" USING btree ("conversation_id","created_at");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "conversations_org_idx" ON "conversations" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "custom_pages_org_idx" ON "custom_pages" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "custom_tab_modules_org_idx" ON "custom_tab_modules" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "device_tokens_user_idx" ON "device_tokens" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "device_tokens_token_idx" ON "device_tokens" USING btree ("token");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "device_tokens_org_idx" ON "device_tokens" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "external_services_org_idx" ON "external_services" USING btree ("organization_id","is_active");--> statement-breakpoint
CREATE UNIQUE INDEX IF NOT EXISTS "one_initial_status_per_form" ON "form_statuses" USING btree ("form_id") WHERE "form_statuses"."is_initial" = true;--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "global_fields_org_idx" ON "global_fields" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "mr_task_msg_idx" ON "message_reactions" USING btree ("task_message_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "mr_conv_msg_idx" ON "message_reactions" USING btree ("conv_message_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "message_reads_user_org_idx" ON "message_reads" USING btree ("user_id","organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "message_reads_message_org_idx" ON "message_reads" USING btree ("message_id","organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "notification_subs_user_idx" ON "notification_subscriptions" USING btree ("user_id","organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "notification_subs_event_idx" ON "notification_subscriptions" USING btree ("event_type_code","is_active");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "org_connections_initiator_idx" ON "org_connections" USING btree ("initiator_org_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "org_connections_partner_idx" ON "org_connections" USING btree ("partner_org_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "org_connections_token_idx" ON "org_connections" USING btree ("token");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "api_keys_org_idx" ON "organization_api_keys" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "api_keys_hash_idx" ON "organization_api_keys" USING btree ("key_hash");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "poll_votes_poll_idx" ON "poll_votes" USING btree ("poll_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "polls_org_idx" ON "polls" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "rag_embeddings_org_type_idx" ON "rag_embeddings" USING btree ("organization_id","entity_type");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "regular_table_rows_task_tab_idx" ON "regular_table_rows" USING btree ("task_id","tab_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "role_members_role_idx" ON "role_members" USING btree ("role_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "role_members_user_idx" ON "role_members" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "roles_org_idx" ON "roles" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "roles_parent_idx" ON "roles" USING btree ("parent_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "system_audit_log_action_created_idx" ON "system_audit_log" USING btree ("action","created_at" DESC NULLS LAST);--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "system_audit_log_org_created_idx" ON "system_audit_log" USING btree ("organization_id","created_at" DESC NULLS LAST);--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_assignees_task_idx" ON "task_assignees" USING btree ("task_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_assignees_user_idx" ON "task_assignees" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_assignees_org_idx" ON "task_assignees" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_audit_log_task_created_idx" ON "task_audit_log" USING btree ("task_id","created_at" DESC NULLS LAST);--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_field_values_task_field_idx" ON "task_field_values" USING btree ("task_id","field_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_messages_task_created_idx" ON "task_messages" USING btree ("task_id","created_at" DESC NULLS LAST);--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_roles_task_idx" ON "task_roles" USING btree ("task_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_roles_role_idx" ON "task_roles" USING btree ("role_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_roles_org_idx" ON "task_roles" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_tab_values_task_idx" ON "task_tab_values" USING btree ("task_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_tab_values_tab_idx" ON "task_tab_values" USING btree ("tab_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_user_access_task_idx" ON "task_user_access" USING btree ("task_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_user_access_user_idx" ON "task_user_access" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "task_user_access_org_idx" ON "task_user_access" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "tasks_org_id_form_id_idx" ON "tasks" USING btree ("organization_id","form_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "tasks_org_id_status_idx" ON "tasks" USING btree ("organization_id","current_status_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "tasks_org_id_assigned_idx" ON "tasks" USING btree ("organization_id","assigned_to");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "user_notifications_idx" ON "user_notifications" USING btree ("user_id","organization_id","is_read","created_at");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "user_presence_user_idx" ON "user_presence" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "user_presence_online_idx" ON "user_presence" USING btree ("is_online");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "user_presence_org_idx" ON "user_presence" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "users_org_role_idx" ON "users" USING btree ("organization_id","role");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "web_push_user_idx" ON "web_push_subscriptions" USING btree ("user_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "web_push_org_idx" ON "web_push_subscriptions" USING btree ("organization_id");--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "web_push_endpoint_idx" ON "web_push_subscriptions" USING btree ("endpoint");