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
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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");