@wraps.dev/cli 2.21.5 → 2.21.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-lambda.zip +0 -0
- package/dist/cli.js +868 -770
- package/dist/cli.js.map +1 -1
- package/dist/lambda/event-processor/.bundled +1 -1
- package/dist/lambda/inbound-processor/.bundled +1 -1
- package/dist/lambda/sms-event-processor/.bundled +1 -1
- package/dist/selfhost-migrations/0000_absent_rogue.sql +203 -0
- package/dist/selfhost-migrations/0001_polite_maverick.sql +17 -0
- package/dist/selfhost-migrations/0002_perpetual_scorpion.sql +1 -0
- package/dist/selfhost-migrations/0003_wealthy_absorbing_man.sql +1 -0
- package/dist/selfhost-migrations/0004_opposite_blur.sql +1 -0
- package/dist/selfhost-migrations/0005_clear_terror.sql +4 -0
- package/dist/selfhost-migrations/0006_soft_black_widow.sql +20 -0
- package/dist/selfhost-migrations/0007_dazzling_saracen.sql +124 -0
- package/dist/selfhost-migrations/0008_broad_hannibal_king.sql +33 -0
- package/dist/selfhost-migrations/0009_bouncy_mystique.sql +73 -0
- package/dist/selfhost-migrations/0010_cheerful_valeria_richards.sql +18 -0
- package/dist/selfhost-migrations/0011_absent_thunderbolts.sql +2 -0
- package/dist/selfhost-migrations/0012_demonic_donald_blake.sql +1 -0
- package/dist/selfhost-migrations/0013_nifty_preak.sql +143 -0
- package/dist/selfhost-migrations/0014_hesitant_beast.sql +2 -0
- package/dist/selfhost-migrations/0015_blue_giant_girl.sql +1 -0
- package/dist/selfhost-migrations/0016_cooing_overlord.sql +1 -0
- package/dist/selfhost-migrations/0017_tranquil_ender_wiggin.sql +11 -0
- package/dist/selfhost-migrations/0018_talented_groot.sql +8 -0
- package/dist/selfhost-migrations/0019_ambitious_devos.sql +3 -0
- package/dist/selfhost-migrations/0020_misty_master_mold.sql +95 -0
- package/dist/selfhost-migrations/0021_regular_harrier.sql +14 -0
- package/dist/selfhost-migrations/0022_sour_blizzard.sql +10 -0
- package/dist/selfhost-migrations/0023_flawless_psynapse.sql +1 -0
- package/dist/selfhost-migrations/0024_premium_blindfold.sql +1 -0
- package/dist/selfhost-migrations/0025_unusual_santa_claus.sql +1 -0
- package/dist/selfhost-migrations/0026_volatile_pandemic.sql +2 -0
- package/dist/selfhost-migrations/0027_workable_logan.sql +4 -0
- package/dist/selfhost-migrations/0028_familiar_prodigy.sql +1 -0
- package/dist/selfhost-migrations/0029_cute_maddog.sql +13 -0
- package/dist/selfhost-migrations/0030_adorable_scarecrow.sql +1 -0
- package/dist/selfhost-migrations/0031_material_slapstick.sql +10 -0
- package/dist/selfhost-migrations/0032_hot_dust.sql +11 -0
- package/dist/selfhost-migrations/0033_slow_deathbird.sql +1 -0
- package/dist/selfhost-migrations/0034_lush_rafael_vega.sql +12 -0
- package/dist/selfhost-migrations/0035_normal_red_hulk.sql +8 -0
- package/dist/selfhost-migrations/0036_marvelous_ezekiel.sql +1 -0
- package/dist/selfhost-migrations/0037_swift_talisman.sql +8 -0
- package/dist/selfhost-migrations/0038_first_mandroid.sql +1 -0
- package/dist/selfhost-migrations/0039_fixed_stryfe.sql +1 -0
- package/dist/selfhost-migrations/0040_add_channel_check_constraints.sql +2 -0
- package/dist/selfhost-migrations/0041_black_spencer_smythe.sql +1 -0
- package/dist/selfhost-migrations/0042_plain_marvel_zombies.sql +2 -0
- package/dist/selfhost-migrations/0043_curved_champions.sql +1 -0
- package/dist/selfhost-migrations/0044_clean_iceman.sql +1 -0
- package/dist/selfhost-migrations/0045_condemned_steel_serpent.sql +1 -0
- package/dist/selfhost-migrations/0046_steep_ultimo.sql +2 -0
- package/dist/selfhost-migrations/0047_empty_sleepwalker.sql +2 -0
- package/dist/selfhost-migrations/0048_cheerful_multiple_man.sql +1 -0
- package/dist/selfhost-migrations/0049_nostalgic_loki.sql +3 -0
- package/dist/selfhost-migrations/0050_add_engagement_metadata.sql +4 -0
- package/dist/selfhost-migrations/0051_odd_marrow.sql +2 -0
- package/dist/selfhost-migrations/0052_redundant_siren.sql +5 -0
- package/dist/selfhost-migrations/0053_soft_carnage.sql +31 -0
- package/dist/selfhost-migrations/0054_blushing_vin_gonzales.sql +1 -0
- package/dist/selfhost-migrations/0055_broadcast_resume_columns.sql +12 -0
- package/dist/selfhost-migrations/0056_broadcast_resume_dedup_cleanup.sql +31 -0
- package/dist/selfhost-migrations/0057_audit_log_actoremail_jsonb.sql +5 -0
- package/package.json +7 -4
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
CREATE TYPE "public"."batch_send_status" AS ENUM('draft', 'queued', 'processing', 'completed', 'failed', 'cancelled');--> statement-breakpoint
|
|
2
|
+
CREATE TYPE "public"."message_send_status" AS ENUM('pending', 'queued', 'sent', 'delivered', 'opened', 'clicked', 'bounced', 'complained', 'failed', 'opted_out');--> statement-breakpoint
|
|
3
|
+
CREATE TYPE "public"."message_source_type" AS ENUM('transactional', 'batch', 'campaign', 'workflow');--> statement-breakpoint
|
|
4
|
+
CREATE TABLE "batch_send" (
|
|
5
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
6
|
+
"organization_id" text NOT NULL,
|
|
7
|
+
"aws_account_id" text,
|
|
8
|
+
"name" text,
|
|
9
|
+
"channel" text DEFAULT 'email' NOT NULL,
|
|
10
|
+
"subject" text,
|
|
11
|
+
"preview_text" text,
|
|
12
|
+
"from" text,
|
|
13
|
+
"from_name" text,
|
|
14
|
+
"reply_to" text,
|
|
15
|
+
"email_template_id" text,
|
|
16
|
+
"html_content" text,
|
|
17
|
+
"text_content" text,
|
|
18
|
+
"body" text,
|
|
19
|
+
"sender_id" text,
|
|
20
|
+
"status" "batch_send_status" DEFAULT 'draft' NOT NULL,
|
|
21
|
+
"total_recipients" integer DEFAULT 0 NOT NULL,
|
|
22
|
+
"processed_recipients" integer DEFAULT 0 NOT NULL,
|
|
23
|
+
"sent" integer DEFAULT 0 NOT NULL,
|
|
24
|
+
"delivered" integer DEFAULT 0 NOT NULL,
|
|
25
|
+
"failed" integer DEFAULT 0 NOT NULL,
|
|
26
|
+
"opened" integer DEFAULT 0 NOT NULL,
|
|
27
|
+
"clicked" integer DEFAULT 0 NOT NULL,
|
|
28
|
+
"bounced" integer DEFAULT 0 NOT NULL,
|
|
29
|
+
"complained" integer DEFAULT 0 NOT NULL,
|
|
30
|
+
"sms_segments" integer DEFAULT 0 NOT NULL,
|
|
31
|
+
"sms_opted_out" integer DEFAULT 0 NOT NULL,
|
|
32
|
+
"error_message" text,
|
|
33
|
+
"error_details" json,
|
|
34
|
+
"scheduled_for" timestamp,
|
|
35
|
+
"started_at" timestamp,
|
|
36
|
+
"completed_at" timestamp,
|
|
37
|
+
"created_by" text,
|
|
38
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
39
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
40
|
+
);
|
|
41
|
+
--> statement-breakpoint
|
|
42
|
+
CREATE TABLE "message_send" (
|
|
43
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
44
|
+
"organization_id" text NOT NULL,
|
|
45
|
+
"contact_id" text,
|
|
46
|
+
"aws_account_id" text NOT NULL,
|
|
47
|
+
"channel" text DEFAULT 'email' NOT NULL,
|
|
48
|
+
"source_type" "message_source_type" NOT NULL,
|
|
49
|
+
"batch_send_id" text,
|
|
50
|
+
"recipient" text NOT NULL,
|
|
51
|
+
"subject" text,
|
|
52
|
+
"from" text,
|
|
53
|
+
"from_name" text,
|
|
54
|
+
"email_template_id" text,
|
|
55
|
+
"body" text,
|
|
56
|
+
"sender_id" text,
|
|
57
|
+
"sms_segment_count" integer,
|
|
58
|
+
"variables" json DEFAULT '{}'::json,
|
|
59
|
+
"message_id" text,
|
|
60
|
+
"status" "message_send_status" DEFAULT 'pending' NOT NULL,
|
|
61
|
+
"sent_at" timestamp,
|
|
62
|
+
"delivered_at" timestamp,
|
|
63
|
+
"opened_at" timestamp,
|
|
64
|
+
"clicked_at" timestamp,
|
|
65
|
+
"bounced_at" timestamp,
|
|
66
|
+
"complained_at" timestamp,
|
|
67
|
+
"opted_out_at" timestamp,
|
|
68
|
+
"error" text,
|
|
69
|
+
"bounce_type" text,
|
|
70
|
+
"bounce_sub_type" text,
|
|
71
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
72
|
+
);
|
|
73
|
+
--> statement-breakpoint
|
|
74
|
+
CREATE TABLE "api_rate_limit_window" (
|
|
75
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
76
|
+
"organization_id" text NOT NULL,
|
|
77
|
+
"minute_key" text NOT NULL,
|
|
78
|
+
"request_count" integer DEFAULT 0 NOT NULL,
|
|
79
|
+
"expires_at" timestamp NOT NULL
|
|
80
|
+
);
|
|
81
|
+
--> statement-breakpoint
|
|
82
|
+
CREATE TABLE "api_usage_daily" (
|
|
83
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
84
|
+
"organization_id" text NOT NULL,
|
|
85
|
+
"date_key" text NOT NULL,
|
|
86
|
+
"request_count" integer DEFAULT 0 NOT NULL,
|
|
87
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
88
|
+
);
|
|
89
|
+
--> statement-breakpoint
|
|
90
|
+
DROP INDEX "contact_unique_org_email_idx";--> statement-breakpoint
|
|
91
|
+
ALTER TABLE "contact" ALTER COLUMN "email" DROP NOT NULL;--> statement-breakpoint
|
|
92
|
+
ALTER TABLE "contact" ALTER COLUMN "email_hash" DROP NOT NULL;--> statement-breakpoint
|
|
93
|
+
ALTER TABLE "aws_account" ADD COLUMN "webhook_secret" text;--> statement-breakpoint
|
|
94
|
+
ALTER TABLE "contact" ADD COLUMN "email_status" text;--> statement-breakpoint
|
|
95
|
+
ALTER TABLE "contact" ADD COLUMN "email_verified_at" timestamp;--> statement-breakpoint
|
|
96
|
+
ALTER TABLE "contact" ADD COLUMN "email_unsubscribed_at" timestamp;--> statement-breakpoint
|
|
97
|
+
ALTER TABLE "contact" ADD COLUMN "email_bounced_at" timestamp;--> statement-breakpoint
|
|
98
|
+
ALTER TABLE "contact" ADD COLUMN "email_complained_at" timestamp;--> statement-breakpoint
|
|
99
|
+
ALTER TABLE "contact" ADD COLUMN "phone" text;--> statement-breakpoint
|
|
100
|
+
ALTER TABLE "contact" ADD COLUMN "phone_hash" text;--> statement-breakpoint
|
|
101
|
+
ALTER TABLE "contact" ADD COLUMN "sms_status" text;--> statement-breakpoint
|
|
102
|
+
ALTER TABLE "contact" ADD COLUMN "sms_consented_at" timestamp;--> statement-breakpoint
|
|
103
|
+
ALTER TABLE "contact" ADD COLUMN "sms_opted_out_at" timestamp;--> statement-breakpoint
|
|
104
|
+
ALTER TABLE "contact" ADD COLUMN "sms_invalid_at" timestamp;--> statement-breakpoint
|
|
105
|
+
ALTER TABLE "contact" ADD COLUMN "last_sms_sent_at" timestamp;--> statement-breakpoint
|
|
106
|
+
ALTER TABLE "contact" ADD COLUMN "last_sms_clicked_at" timestamp;--> statement-breakpoint
|
|
107
|
+
ALTER TABLE "contact" ADD COLUMN "sms_sent" integer DEFAULT 0 NOT NULL;--> statement-breakpoint
|
|
108
|
+
ALTER TABLE "contact" ADD COLUMN "sms_clicked" integer DEFAULT 0 NOT NULL;--> statement-breakpoint
|
|
109
|
+
ALTER TABLE "batch_send" ADD CONSTRAINT "batch_send_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
110
|
+
ALTER TABLE "batch_send" ADD CONSTRAINT "batch_send_aws_account_id_aws_account_id_fk" FOREIGN KEY ("aws_account_id") REFERENCES "public"."aws_account"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
111
|
+
ALTER TABLE "batch_send" ADD CONSTRAINT "batch_send_email_template_id_template_id_fk" FOREIGN KEY ("email_template_id") REFERENCES "public"."template"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
112
|
+
ALTER TABLE "batch_send" ADD CONSTRAINT "batch_send_created_by_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
113
|
+
ALTER TABLE "message_send" ADD CONSTRAINT "message_send_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
114
|
+
ALTER TABLE "message_send" ADD CONSTRAINT "message_send_contact_id_contact_id_fk" FOREIGN KEY ("contact_id") REFERENCES "public"."contact"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
115
|
+
ALTER TABLE "message_send" ADD CONSTRAINT "message_send_aws_account_id_aws_account_id_fk" FOREIGN KEY ("aws_account_id") REFERENCES "public"."aws_account"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
116
|
+
ALTER TABLE "message_send" ADD CONSTRAINT "message_send_batch_send_id_batch_send_id_fk" FOREIGN KEY ("batch_send_id") REFERENCES "public"."batch_send"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
117
|
+
ALTER TABLE "message_send" ADD CONSTRAINT "message_send_email_template_id_template_id_fk" FOREIGN KEY ("email_template_id") REFERENCES "public"."template"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
118
|
+
ALTER TABLE "api_rate_limit_window" ADD CONSTRAINT "api_rate_limit_window_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
119
|
+
ALTER TABLE "api_usage_daily" ADD CONSTRAINT "api_usage_daily_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
120
|
+
CREATE INDEX "batch_send_org_idx" ON "batch_send" USING btree ("organization_id");--> statement-breakpoint
|
|
121
|
+
CREATE INDEX "batch_send_channel_idx" ON "batch_send" USING btree ("channel");--> statement-breakpoint
|
|
122
|
+
CREATE INDEX "batch_send_status_idx" ON "batch_send" USING btree ("organization_id","status");--> statement-breakpoint
|
|
123
|
+
CREATE INDEX "batch_send_created_at_idx" ON "batch_send" USING btree ("organization_id","created_at");--> statement-breakpoint
|
|
124
|
+
CREATE INDEX "message_send_org_idx" ON "message_send" USING btree ("organization_id");--> statement-breakpoint
|
|
125
|
+
CREATE INDEX "message_send_contact_idx" ON "message_send" USING btree ("contact_id");--> statement-breakpoint
|
|
126
|
+
CREATE INDEX "message_send_channel_idx" ON "message_send" USING btree ("channel");--> statement-breakpoint
|
|
127
|
+
CREATE INDEX "message_send_batch_idx" ON "message_send" USING btree ("batch_send_id");--> statement-breakpoint
|
|
128
|
+
CREATE INDEX "message_send_status_idx" ON "message_send" USING btree ("batch_send_id","status");--> statement-breakpoint
|
|
129
|
+
CREATE UNIQUE INDEX "message_send_message_id_idx" ON "message_send" USING btree ("message_id");--> statement-breakpoint
|
|
130
|
+
CREATE INDEX "message_send_source_type_idx" ON "message_send" USING btree ("source_type");--> statement-breakpoint
|
|
131
|
+
CREATE INDEX "message_send_created_at_idx" ON "message_send" USING btree ("created_at");--> statement-breakpoint
|
|
132
|
+
CREATE UNIQUE INDEX "api_rate_limit_org_minute_idx" ON "api_rate_limit_window" USING btree ("organization_id","minute_key");--> statement-breakpoint
|
|
133
|
+
CREATE INDEX "api_rate_limit_expires_idx" ON "api_rate_limit_window" USING btree ("expires_at");--> statement-breakpoint
|
|
134
|
+
CREATE UNIQUE INDEX "api_usage_daily_org_date_idx" ON "api_usage_daily" USING btree ("organization_id","date_key");--> statement-breakpoint
|
|
135
|
+
CREATE INDEX "api_usage_daily_date_idx" ON "api_usage_daily" USING btree ("date_key");--> statement-breakpoint
|
|
136
|
+
CREATE INDEX "contact_email_status_idx" ON "contact" USING btree ("organization_id","email_status");--> statement-breakpoint
|
|
137
|
+
CREATE INDEX "contact_phone_idx" ON "contact" USING btree ("phone");--> statement-breakpoint
|
|
138
|
+
CREATE UNIQUE INDEX "contact_unique_org_phone_idx" ON "contact" USING btree ("organization_id","phone_hash") WHERE phone_hash IS NOT NULL;--> statement-breakpoint
|
|
139
|
+
CREATE INDEX "contact_sms_status_idx" ON "contact" USING btree ("organization_id","sms_status");--> statement-breakpoint
|
|
140
|
+
CREATE UNIQUE INDEX "contact_unique_org_email_idx" ON "contact" USING btree ("organization_id","email_hash") WHERE email_hash IS NOT NULL;--> statement-breakpoint
|
|
141
|
+
ALTER TABLE "organization_extension" DROP COLUMN "plan";--> statement-breakpoint
|
|
142
|
+
ALTER TABLE "organization_extension" DROP COLUMN "stripe_customer_id";--> statement-breakpoint
|
|
143
|
+
ALTER TABLE "organization_extension" DROP COLUMN "stripe_subscription_id";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "topic" DROP COLUMN "subscriber_count";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "contact_topic" ADD COLUMN "confirmed_at" timestamp;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
CREATE TABLE "topic_settings" (
|
|
2
|
+
"organization_id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"confirmation_from_name" text,
|
|
4
|
+
"confirmation_from_email" text,
|
|
5
|
+
"confirmation_reply_to_email" text,
|
|
6
|
+
"preference_center_title" text,
|
|
7
|
+
"preference_center_description" text,
|
|
8
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
9
|
+
);
|
|
10
|
+
--> statement-breakpoint
|
|
11
|
+
ALTER TABLE "topic_settings" ADD CONSTRAINT "topic_settings_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
CREATE TYPE "public"."email_type" AS ENUM('marketing', 'transactional');--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "contact" ADD COLUMN "first_name" text;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "contact" ADD COLUMN "last_name" text;--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "contact" ADD COLUMN "company" text;--> statement-breakpoint
|
|
5
|
+
ALTER TABLE "contact" ADD COLUMN "job_title" text;--> statement-breakpoint
|
|
6
|
+
ALTER TABLE "topic_settings" ADD COLUMN "confirmation_template_id" text;--> statement-breakpoint
|
|
7
|
+
ALTER TABLE "template" ADD COLUMN "email_type" "email_type" DEFAULT 'marketing' NOT NULL;--> statement-breakpoint
|
|
8
|
+
ALTER TABLE "topic_settings" ADD CONSTRAINT "topic_settings_confirmation_template_id_template_id_fk" FOREIGN KEY ("confirmation_template_id") REFERENCES "public"."template"("id") ON DELETE set null ON UPDATE no action;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
CREATE TYPE "public"."workflow_execution_status" AS ENUM('pending', 'active', 'paused', 'waiting', 'completed', 'failed', 'cancelled');--> statement-breakpoint
|
|
2
|
+
CREATE TYPE "public"."workflow_status" AS ENUM('draft', 'enabled', 'paused', 'archived');--> statement-breakpoint
|
|
3
|
+
CREATE TYPE "public"."workflow_step_execution_status" AS ENUM('pending', 'executing', 'completed', 'failed', 'skipped');--> statement-breakpoint
|
|
4
|
+
CREATE TABLE "workflow" (
|
|
5
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
6
|
+
"organization_id" text NOT NULL,
|
|
7
|
+
"aws_account_id" text,
|
|
8
|
+
"name" text NOT NULL,
|
|
9
|
+
"description" text,
|
|
10
|
+
"topic_id" text,
|
|
11
|
+
"canvas_viewport" jsonb DEFAULT '{"x":0,"y":0,"zoom":1}'::jsonb,
|
|
12
|
+
"status" "workflow_status" DEFAULT 'draft' NOT NULL,
|
|
13
|
+
"trigger_type" text,
|
|
14
|
+
"trigger_config" jsonb DEFAULT '{}'::jsonb,
|
|
15
|
+
"steps" jsonb DEFAULT '[]'::jsonb,
|
|
16
|
+
"transitions" jsonb DEFAULT '[]'::jsonb,
|
|
17
|
+
"allow_reentry" boolean DEFAULT false NOT NULL,
|
|
18
|
+
"reentry_delay_seconds" integer,
|
|
19
|
+
"max_concurrent_executions" integer DEFAULT 1000,
|
|
20
|
+
"contact_cooldown_seconds" integer,
|
|
21
|
+
"total_executions" integer DEFAULT 0 NOT NULL,
|
|
22
|
+
"active_executions" integer DEFAULT 0 NOT NULL,
|
|
23
|
+
"completed_executions" integer DEFAULT 0 NOT NULL,
|
|
24
|
+
"failed_executions" integer DEFAULT 0 NOT NULL,
|
|
25
|
+
"dropped_executions" integer DEFAULT 0 NOT NULL,
|
|
26
|
+
"ai_generated" boolean DEFAULT false,
|
|
27
|
+
"ai_prompt" text,
|
|
28
|
+
"last_triggered_at" timestamp,
|
|
29
|
+
"created_by" text,
|
|
30
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
31
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
32
|
+
);
|
|
33
|
+
--> statement-breakpoint
|
|
34
|
+
CREATE TABLE "workflow_execution" (
|
|
35
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
36
|
+
"workflow_id" text NOT NULL,
|
|
37
|
+
"contact_id" text NOT NULL,
|
|
38
|
+
"organization_id" text NOT NULL,
|
|
39
|
+
"status" "workflow_execution_status" DEFAULT 'pending' NOT NULL,
|
|
40
|
+
"current_step_id" text,
|
|
41
|
+
"context" jsonb DEFAULT '{}'::jsonb,
|
|
42
|
+
"trigger_event_id" text,
|
|
43
|
+
"trigger_data" jsonb,
|
|
44
|
+
"waiting_for_event" text,
|
|
45
|
+
"waiting_for_conditions" jsonb,
|
|
46
|
+
"wait_timeout_at" timestamp,
|
|
47
|
+
"wait_timeout_scheduler_name" text,
|
|
48
|
+
"next_step_scheduled_at" timestamp,
|
|
49
|
+
"delay_scheduler_name" text,
|
|
50
|
+
"error" text,
|
|
51
|
+
"error_step_id" text,
|
|
52
|
+
"retry_count" integer DEFAULT 0,
|
|
53
|
+
"started_at" timestamp,
|
|
54
|
+
"completed_at" timestamp,
|
|
55
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
56
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
57
|
+
);
|
|
58
|
+
--> statement-breakpoint
|
|
59
|
+
CREATE TABLE "workflow_step_execution" (
|
|
60
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
61
|
+
"execution_id" text NOT NULL,
|
|
62
|
+
"step_id" text NOT NULL,
|
|
63
|
+
"step_type" text NOT NULL,
|
|
64
|
+
"status" "workflow_step_execution_status" DEFAULT 'pending' NOT NULL,
|
|
65
|
+
"idempotency_key" text NOT NULL,
|
|
66
|
+
"branch" text,
|
|
67
|
+
"result" jsonb,
|
|
68
|
+
"error" text,
|
|
69
|
+
"skip_reason" text,
|
|
70
|
+
"started_at" timestamp,
|
|
71
|
+
"completed_at" timestamp,
|
|
72
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
73
|
+
);
|
|
74
|
+
--> statement-breakpoint
|
|
75
|
+
ALTER TABLE "workflow" ADD CONSTRAINT "workflow_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
76
|
+
ALTER TABLE "workflow" ADD CONSTRAINT "workflow_aws_account_id_aws_account_id_fk" FOREIGN KEY ("aws_account_id") REFERENCES "public"."aws_account"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
77
|
+
ALTER TABLE "workflow" ADD CONSTRAINT "workflow_topic_id_topic_id_fk" FOREIGN KEY ("topic_id") REFERENCES "public"."topic"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
78
|
+
ALTER TABLE "workflow" ADD CONSTRAINT "workflow_created_by_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
79
|
+
ALTER TABLE "workflow_execution" ADD CONSTRAINT "workflow_execution_workflow_id_workflow_id_fk" FOREIGN KEY ("workflow_id") REFERENCES "public"."workflow"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
80
|
+
ALTER TABLE "workflow_execution" ADD CONSTRAINT "workflow_execution_contact_id_contact_id_fk" FOREIGN KEY ("contact_id") REFERENCES "public"."contact"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
81
|
+
ALTER TABLE "workflow_execution" ADD CONSTRAINT "workflow_execution_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
82
|
+
ALTER TABLE "workflow_step_execution" ADD CONSTRAINT "workflow_step_execution_execution_id_workflow_execution_id_fk" FOREIGN KEY ("execution_id") REFERENCES "public"."workflow_execution"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
83
|
+
CREATE INDEX "workflow_org_idx" ON "workflow" USING btree ("organization_id");--> statement-breakpoint
|
|
84
|
+
CREATE INDEX "workflow_status_idx" ON "workflow" USING btree ("organization_id","status");--> statement-breakpoint
|
|
85
|
+
CREATE INDEX "workflow_trigger_type_idx" ON "workflow" USING btree ("organization_id","trigger_type");--> statement-breakpoint
|
|
86
|
+
CREATE INDEX "workflow_aws_account_idx" ON "workflow" USING btree ("aws_account_id");--> statement-breakpoint
|
|
87
|
+
CREATE INDEX "workflow_execution_workflow_idx" ON "workflow_execution" USING btree ("workflow_id");--> statement-breakpoint
|
|
88
|
+
CREATE INDEX "workflow_execution_contact_idx" ON "workflow_execution" USING btree ("contact_id");--> statement-breakpoint
|
|
89
|
+
CREATE INDEX "workflow_execution_org_idx" ON "workflow_execution" USING btree ("organization_id");--> statement-breakpoint
|
|
90
|
+
CREATE INDEX "workflow_execution_status_idx" ON "workflow_execution" USING btree ("workflow_id","status");--> statement-breakpoint
|
|
91
|
+
CREATE INDEX "workflow_execution_org_status_idx" ON "workflow_execution" USING btree ("organization_id","status");--> statement-breakpoint
|
|
92
|
+
CREATE INDEX "workflow_execution_scheduled_idx" ON "workflow_execution" USING btree ("next_step_scheduled_at");--> statement-breakpoint
|
|
93
|
+
CREATE INDEX "workflow_execution_waiting_event_idx" ON "workflow_execution" USING btree ("organization_id","waiting_for_event");--> statement-breakpoint
|
|
94
|
+
CREATE INDEX "workflow_step_execution_execution_idx" ON "workflow_step_execution" USING btree ("execution_id");--> statement-breakpoint
|
|
95
|
+
CREATE UNIQUE INDEX "workflow_step_execution_idempotency_idx" ON "workflow_step_execution" USING btree ("idempotency_key");
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
CREATE TABLE "contact_event" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"contact_id" text NOT NULL,
|
|
4
|
+
"organization_id" text NOT NULL,
|
|
5
|
+
"event_name" text NOT NULL,
|
|
6
|
+
"event_data" json,
|
|
7
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
8
|
+
);
|
|
9
|
+
--> statement-breakpoint
|
|
10
|
+
ALTER TABLE "contact_event" ADD CONSTRAINT "contact_event_contact_id_contact_id_fk" FOREIGN KEY ("contact_id") REFERENCES "public"."contact"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
11
|
+
ALTER TABLE "contact_event" ADD CONSTRAINT "contact_event_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
12
|
+
CREATE INDEX "contact_event_contact_idx" ON "contact_event" USING btree ("contact_id");--> statement-breakpoint
|
|
13
|
+
CREATE INDEX "contact_event_org_event_idx" ON "contact_event" USING btree ("organization_id","event_name");--> statement-breakpoint
|
|
14
|
+
CREATE INDEX "contact_event_contact_event_idx" ON "contact_event" USING btree ("contact_id","event_name");
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
ALTER TABLE "organization_extension" ADD COLUMN "default_aws_account_id" text;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "organization_extension" ADD COLUMN "default_from" text;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "organization_extension" ADD COLUMN "default_from_name" text;--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "organization_extension" ADD COLUMN "default_reply_to" text;--> statement-breakpoint
|
|
5
|
+
ALTER TABLE "organization_extension" ADD COLUMN "default_sender_id" text;--> statement-breakpoint
|
|
6
|
+
ALTER TABLE "workflow" ADD COLUMN "default_from" text;--> statement-breakpoint
|
|
7
|
+
ALTER TABLE "workflow" ADD COLUMN "default_from_name" text;--> statement-breakpoint
|
|
8
|
+
ALTER TABLE "workflow" ADD COLUMN "default_reply_to" text;--> statement-breakpoint
|
|
9
|
+
ALTER TABLE "workflow" ADD COLUMN "default_sender_id" text;--> statement-breakpoint
|
|
10
|
+
ALTER TABLE "organization_extension" ADD CONSTRAINT "organization_extension_default_aws_account_id_aws_account_id_fk" FOREIGN KEY ("default_aws_account_id") REFERENCES "public"."aws_account"("id") ON DELETE set null ON UPDATE no action;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "workflow_execution" ADD COLUMN "allow_reentry" boolean DEFAULT false NOT NULL;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CREATE UNIQUE INDEX "workflow_execution_no_reentry_idx" ON "workflow_execution" USING btree ("workflow_id","contact_id") WHERE "workflow_execution"."status" IN ('pending', 'active', 'paused', 'waiting') AND "workflow_execution"."allow_reentry" = false;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "subscription" ADD CONSTRAINT "subscription_reference_id_organization_id_fk" FOREIGN KEY ("reference_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
ALTER TYPE "public"."message_send_status" ADD VALUE 'suppressed' BEFORE 'failed';--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "batch_send" ADD COLUMN "suppressed" integer DEFAULT 0 NOT NULL;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "message_send" ADD COLUMN "suppressed_at" timestamp;--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "contact" ADD COLUMN "email_suppressed_at" timestamp;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "subscription" ADD COLUMN "annual" boolean DEFAULT false;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
CREATE TABLE "event_usage_monthly" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"organization_id" text NOT NULL,
|
|
4
|
+
"period_key" text NOT NULL,
|
|
5
|
+
"event_count" integer DEFAULT 0 NOT NULL,
|
|
6
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
7
|
+
);
|
|
8
|
+
--> statement-breakpoint
|
|
9
|
+
ALTER TABLE "contact_event" ADD COLUMN "expires_at" timestamp;--> statement-breakpoint
|
|
10
|
+
ALTER TABLE "event_usage_monthly" ADD CONSTRAINT "event_usage_monthly_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
11
|
+
CREATE UNIQUE INDEX "event_usage_monthly_org_period_idx" ON "event_usage_monthly" USING btree ("organization_id","period_key");--> statement-breakpoint
|
|
12
|
+
CREATE INDEX "event_usage_monthly_period_idx" ON "event_usage_monthly" USING btree ("period_key");--> statement-breakpoint
|
|
13
|
+
CREATE INDEX "contact_event_expires_idx" ON "contact_event" USING btree ("expires_at");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "organization" ADD COLUMN "stripe_organization_id" text;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
ALTER TABLE "aws_account" ADD COLUMN "email_enabled" boolean DEFAULT false NOT NULL;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "aws_account" ADD COLUMN "features" json;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "aws_account" DROP COLUMN "archiving_enabled";--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "aws_account" DROP COLUMN "archive_arn";--> statement-breakpoint
|
|
5
|
+
ALTER TABLE "aws_account" DROP COLUMN "event_history_enabled";--> statement-breakpoint
|
|
6
|
+
ALTER TABLE "aws_account" DROP COLUMN "event_tracking_enabled";--> statement-breakpoint
|
|
7
|
+
ALTER TABLE "aws_account" DROP COLUMN "config_set_name";--> statement-breakpoint
|
|
8
|
+
ALTER TABLE "aws_account" DROP COLUMN "custom_tracking_domain";--> statement-breakpoint
|
|
9
|
+
ALTER TABLE "aws_account" DROP COLUMN "sms_phone_number_count";--> statement-breakpoint
|
|
10
|
+
ALTER TABLE "aws_account" DROP COLUMN "sms_event_history_enabled";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
CREATE TABLE "message_usage_monthly" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"organization_id" text NOT NULL,
|
|
4
|
+
"period_key" text NOT NULL,
|
|
5
|
+
"message_count" integer DEFAULT 0 NOT NULL,
|
|
6
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
7
|
+
);
|
|
8
|
+
--> statement-breakpoint
|
|
9
|
+
ALTER TABLE "message_usage_monthly" ADD CONSTRAINT "message_usage_monthly_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
10
|
+
CREATE UNIQUE INDEX "message_usage_monthly_org_period_idx" ON "message_usage_monthly" USING btree ("organization_id","period_key");--> statement-breakpoint
|
|
11
|
+
CREATE INDEX "message_usage_monthly_period_idx" ON "message_usage_monthly" USING btree ("period_key");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CREATE UNIQUE INDEX "api_key_key_hash_idx" ON "api_key" USING btree ("key_hash");
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
CREATE TABLE "device_code" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"device_code" text NOT NULL,
|
|
4
|
+
"user_code" text NOT NULL,
|
|
5
|
+
"user_id" text,
|
|
6
|
+
"expires_at" timestamp NOT NULL,
|
|
7
|
+
"status" text NOT NULL,
|
|
8
|
+
"last_polled_at" timestamp,
|
|
9
|
+
"polling_interval" integer,
|
|
10
|
+
"client_id" text,
|
|
11
|
+
"scope" text
|
|
12
|
+
);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
ALTER TABLE "template" ADD COLUMN "slug" text;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "template" ADD COLUMN "source" text;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "template" ADD COLUMN "source_format" text DEFAULT 'tiptap' NOT NULL;--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "template" ADD COLUMN "source_hash" text;--> statement-breakpoint
|
|
5
|
+
ALTER TABLE "template" ADD COLUMN "pushed_from_cli" boolean DEFAULT false NOT NULL;--> statement-breakpoint
|
|
6
|
+
ALTER TABLE "template" ADD COLUMN "last_pushed_at" timestamp;--> statement-breakpoint
|
|
7
|
+
ALTER TABLE "template" ADD COLUMN "cli_project_path" text;--> statement-breakpoint
|
|
8
|
+
CREATE UNIQUE INDEX "template_org_slug_idx" ON "template" USING btree ("organization_id","slug");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "template" ADD COLUMN "last_edited_from" text;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
ALTER TABLE "workflow" ADD COLUMN "slug" text;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "workflow" ADD COLUMN "source_ts" text;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "workflow" ADD COLUMN "source_hash" text;--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "workflow" ADD COLUMN "pushed_from_cli" boolean DEFAULT false;--> statement-breakpoint
|
|
5
|
+
ALTER TABLE "workflow" ADD COLUMN "last_pushed_at" timestamp;--> statement-breakpoint
|
|
6
|
+
ALTER TABLE "workflow" ADD COLUMN "cli_project_path" text;--> statement-breakpoint
|
|
7
|
+
ALTER TABLE "workflow" ADD COLUMN "last_edited_from" text;--> statement-breakpoint
|
|
8
|
+
CREATE UNIQUE INDEX "workflow_org_slug_idx" ON "workflow" USING btree ("organization_id","slug");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "contact" ADD COLUMN "preferred_channel" text;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "template" ADD COLUMN "channel" text DEFAULT 'email' NOT NULL;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "batch_send" ADD COLUMN "variable_mappings" json;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "template" ALTER COLUMN "created_by" DROP NOT NULL;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "template" ALTER COLUMN "source_format" SET DEFAULT 'react-email';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "template" ADD COLUMN "preview_text" text;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "message_send" ADD COLUMN "clicked_url" text;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
ALTER TABLE "message_send" ADD COLUMN "workflow_execution_id" text;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "message_send" ADD CONSTRAINT "message_send_workflow_execution_id_workflow_execution_id_fk" FOREIGN KEY ("workflow_execution_id") REFERENCES "public"."workflow_execution"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
3
|
+
CREATE INDEX "message_send_workflow_execution_idx" ON "message_send" USING btree ("workflow_execution_id");
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
ALTER TABLE "message_send" ADD COLUMN "open_user_agent" text;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "message_send" ADD COLUMN "open_ip_address" text;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "message_send" ADD COLUMN "click_user_agent" text;--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "message_send" ADD COLUMN "click_ip_address" text;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
DROP INDEX "aws_account_permission_unique_idx";--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "template_version" ALTER COLUMN "created_by" DROP NOT NULL;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "contact" ADD COLUMN "external_id" text;--> statement-breakpoint
|
|
4
|
+
CREATE UNIQUE INDEX "contact_unique_org_external_id_idx" ON "contact" USING btree ("organization_id","external_id") WHERE external_id IS NOT NULL;--> statement-breakpoint
|
|
5
|
+
CREATE UNIQUE INDEX "aws_account_permission_unique_idx" ON "aws_account_permission" USING btree ("user_id","aws_account_id");
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
CREATE TABLE "scim_provider" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"provider_id" text NOT NULL,
|
|
4
|
+
"scim_token" text NOT NULL,
|
|
5
|
+
"organization_id" text,
|
|
6
|
+
"user_id" text,
|
|
7
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
8
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
9
|
+
);
|
|
10
|
+
--> statement-breakpoint
|
|
11
|
+
CREATE TABLE "sso_provider" (
|
|
12
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
13
|
+
"provider_id" text NOT NULL,
|
|
14
|
+
"issuer" text NOT NULL,
|
|
15
|
+
"domain" text NOT NULL,
|
|
16
|
+
"oidc_config" text,
|
|
17
|
+
"saml_config" text,
|
|
18
|
+
"user_id" text,
|
|
19
|
+
"organization_id" text NOT NULL,
|
|
20
|
+
"domain_verified" boolean DEFAULT false NOT NULL,
|
|
21
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
22
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
23
|
+
CONSTRAINT "sso_provider_provider_id_unique" UNIQUE("provider_id")
|
|
24
|
+
);
|
|
25
|
+
--> statement-breakpoint
|
|
26
|
+
ALTER TABLE "scim_provider" ADD CONSTRAINT "scim_provider_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
27
|
+
ALTER TABLE "scim_provider" ADD CONSTRAINT "scim_provider_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
28
|
+
ALTER TABLE "sso_provider" ADD CONSTRAINT "sso_provider_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
29
|
+
ALTER TABLE "sso_provider" ADD CONSTRAINT "sso_provider_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
30
|
+
CREATE INDEX "scim_provider_org_idx" ON "scim_provider" USING btree ("organization_id");--> statement-breakpoint
|
|
31
|
+
CREATE INDEX "sso_provider_org_idx" ON "sso_provider" USING btree ("organization_id");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "scim_provider" ALTER COLUMN "organization_id" SET NOT NULL;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
DROP INDEX "aws_account_permission_unique_idx";--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "template_version" ALTER COLUMN "created_by" DROP NOT NULL;--> statement-breakpoint
|
|
3
|
+
ALTER TABLE "batch_send" ADD COLUMN "last_chunk_at" timestamp;--> statement-breakpoint
|
|
4
|
+
ALTER TABLE "batch_send" ADD COLUMN "last_chunk_index" integer;--> statement-breakpoint
|
|
5
|
+
ALTER TABLE "batch_send" ADD COLUMN "last_cursor" json;--> statement-breakpoint
|
|
6
|
+
-- NOTE: "message_send_dedup_idx" and "contact_keyset_idx" are declared in the
|
|
7
|
+
-- Drizzle schema but are created out-of-band via
|
|
8
|
+
-- packages/db/scripts/create-broadcast-resume-indexes.ts (CREATE INDEX
|
|
9
|
+
-- CONCURRENTLY). drizzle-kit cannot run CONCURRENTLY inside a txn block.
|
|
10
|
+
-- Run that script AFTER this migration applies but BEFORE shipping the DLQ
|
|
11
|
+
-- consumer or worker resume columns are used in production.
|
|
12
|
+
CREATE UNIQUE INDEX "aws_account_permission_unique_idx" ON "aws_account_permission" USING btree ("user_id","aws_account_id");
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
-- Broadcast Resume: message_send dedup cleanup
|
|
2
|
+
--
|
|
3
|
+
-- Before the CONCURRENT unique-index script can run, any existing
|
|
4
|
+
-- duplicate (batch_send_id, contact_id) tuples on message_send must be
|
|
5
|
+
-- removed. Keeps the oldest row per (batch_send_id, contact_id) group.
|
|
6
|
+
--
|
|
7
|
+
-- Pre-flight guard: abort if the duplicate-candidate set is unexpectedly
|
|
8
|
+
-- large. If you hit this guard, run the DELETE manually with chunking
|
|
9
|
+
-- and then retry the migration.
|
|
10
|
+
|
|
11
|
+
DO $$
|
|
12
|
+
BEGIN
|
|
13
|
+
IF (SELECT COUNT(*) FROM message_send WHERE contact_id IS NOT NULL) > 5000000 THEN
|
|
14
|
+
RAISE EXCEPTION 'Too many message_send rows (>5M); run dedup cleanup manually in chunks before re-running this migration';
|
|
15
|
+
END IF;
|
|
16
|
+
END $$;
|
|
17
|
+
--> statement-breakpoint
|
|
18
|
+
DELETE FROM message_send
|
|
19
|
+
WHERE id IN (
|
|
20
|
+
SELECT id FROM (
|
|
21
|
+
SELECT
|
|
22
|
+
id,
|
|
23
|
+
ROW_NUMBER() OVER (
|
|
24
|
+
PARTITION BY batch_send_id, contact_id
|
|
25
|
+
ORDER BY created_at, id
|
|
26
|
+
) AS rn
|
|
27
|
+
FROM message_send
|
|
28
|
+
WHERE contact_id IS NOT NULL
|
|
29
|
+
) x
|
|
30
|
+
WHERE rn > 1
|
|
31
|
+
);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
ALTER TABLE "audit_log" ADD COLUMN "actor_email" text;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "audit_log" ALTER COLUMN "metadata" SET DATA TYPE jsonb USING metadata::text::jsonb;--> statement-breakpoint
|
|
3
|
+
DROP INDEX IF EXISTS "audit_log_org_idx";--> statement-breakpoint
|
|
4
|
+
DROP INDEX IF EXISTS "audit_log_timestamp_idx";--> statement-breakpoint
|
|
5
|
+
CREATE INDEX "audit_log_org_created_idx" ON "audit_log" ("organization_id","created_at");
|