@rudderhq/db 0.3.5-canary.2 → 0.3.5-canary.20

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.
@@ -0,0 +1,30 @@
1
+ CREATE TABLE "messenger_custom_group_entries" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "org_id" uuid NOT NULL,
4
+ "user_id" text NOT NULL,
5
+ "group_id" uuid NOT NULL,
6
+ "thread_key" text NOT NULL,
7
+ "sort_order" integer DEFAULT 0 NOT NULL,
8
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
9
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
10
+ );
11
+ --> statement-breakpoint
12
+ CREATE TABLE "messenger_custom_groups" (
13
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
14
+ "org_id" uuid NOT NULL,
15
+ "user_id" text NOT NULL,
16
+ "name" text NOT NULL,
17
+ "sort_order" integer DEFAULT 0 NOT NULL,
18
+ "collapsed" boolean DEFAULT false NOT NULL,
19
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
20
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
21
+ CONSTRAINT "messenger_custom_groups_org_user_id_unique" UNIQUE("org_id","user_id","id")
22
+ );
23
+ --> statement-breakpoint
24
+ ALTER TABLE "messenger_custom_group_entries" ADD CONSTRAINT "messenger_custom_group_entries_org_id_organizations_id_fk" FOREIGN KEY ("org_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
25
+ ALTER TABLE "messenger_custom_group_entries" ADD CONSTRAINT "messenger_custom_group_entries_owner_group_fk" FOREIGN KEY ("org_id","user_id","group_id") REFERENCES "public"."messenger_custom_groups"("org_id","user_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
26
+ ALTER TABLE "messenger_custom_groups" ADD CONSTRAINT "messenger_custom_groups_org_id_organizations_id_fk" FOREIGN KEY ("org_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
27
+ CREATE INDEX "messenger_custom_group_entries_org_user_group_idx" ON "messenger_custom_group_entries" USING btree ("org_id","user_id","group_id","sort_order");--> statement-breakpoint
28
+ CREATE UNIQUE INDEX "messenger_custom_group_entries_org_user_thread_idx" ON "messenger_custom_group_entries" USING btree ("org_id","user_id","thread_key");--> statement-breakpoint
29
+ CREATE INDEX "messenger_custom_groups_org_user_idx" ON "messenger_custom_groups" USING btree ("org_id","user_id");--> statement-breakpoint
30
+ CREATE INDEX "messenger_custom_groups_org_user_order_idx" ON "messenger_custom_groups" USING btree ("org_id","user_id","sort_order");
@@ -0,0 +1 @@
1
+ ALTER TABLE "messenger_custom_groups" ADD COLUMN "icon" text;
@@ -0,0 +1,110 @@
1
+ ALTER TABLE "heartbeat_runs" ADD COLUMN "chat_conversation_id" uuid;
2
+ --> statement-breakpoint
3
+ ALTER TABLE "chat_messages" ADD COLUMN "run_id" uuid;
4
+ --> statement-breakpoint
5
+ ALTER TABLE "heartbeat_runs" ADD CONSTRAINT "heartbeat_runs_chat_conversation_id_chat_conversations_id_fk" FOREIGN KEY ("chat_conversation_id") REFERENCES "public"."chat_conversations"("id") ON DELETE set null ON UPDATE no action;
6
+ --> statement-breakpoint
7
+ ALTER TABLE "chat_messages" ADD CONSTRAINT "chat_messages_run_id_heartbeat_runs_id_fk" FOREIGN KEY ("run_id") REFERENCES "public"."heartbeat_runs"("id") ON DELETE set null ON UPDATE no action;
8
+ --> statement-breakpoint
9
+ CREATE INDEX "heartbeat_runs_company_chat_conversation_status_updated_idx" ON "heartbeat_runs" USING btree ("org_id","chat_conversation_id","status","updated_at");
10
+ --> statement-breakpoint
11
+ CREATE INDEX "chat_messages_run_idx" ON "chat_messages" USING btree ("run_id");
12
+ --> statement-breakpoint
13
+ CREATE UNIQUE INDEX "heartbeat_runs_active_chat_conversation_uq" ON "heartbeat_runs" USING btree ("org_id","chat_conversation_id") WHERE "chat_conversation_id" IS NOT NULL AND "status" IN ('queued','running');
14
+ --> statement-breakpoint
15
+ DO $$
16
+ DECLARE
17
+ batch_size integer := 1000;
18
+ processed integer := 0;
19
+ total_processed integer := 0;
20
+ BEGIN
21
+ LOOP
22
+ WITH candidates AS (
23
+ SELECT
24
+ m.id AS message_id,
25
+ gen_random_uuid() AS run_id,
26
+ m.org_id,
27
+ m.replying_agent_id AS agent_id,
28
+ m.conversation_id AS chat_conversation_id,
29
+ c.primary_issue_id,
30
+ c.plan_mode,
31
+ m.chat_turn_id,
32
+ m.turn_variant,
33
+ m.created_at,
34
+ m.updated_at
35
+ FROM "chat_messages" m
36
+ INNER JOIN "chat_conversations" c ON c.id = m.conversation_id
37
+ WHERE m.run_id IS NULL
38
+ AND m.role = 'assistant'
39
+ AND m.replying_agent_id IS NOT NULL
40
+ ORDER BY m.created_at, m.id
41
+ LIMIT batch_size
42
+ ),
43
+ inserted AS (
44
+ INSERT INTO "heartbeat_runs" (
45
+ "id",
46
+ "org_id",
47
+ "agent_id",
48
+ "invocation_source",
49
+ "trigger_detail",
50
+ "status",
51
+ "started_at",
52
+ "finished_at",
53
+ "chat_conversation_id",
54
+ "context_snapshot",
55
+ "result_json",
56
+ "created_at",
57
+ "updated_at"
58
+ )
59
+ SELECT
60
+ run_id,
61
+ org_id,
62
+ agent_id,
63
+ 'chat',
64
+ 'chat_assistant_reply',
65
+ 'succeeded',
66
+ created_at,
67
+ updated_at,
68
+ chat_conversation_id,
69
+ jsonb_build_object(
70
+ 'scene', 'chat',
71
+ 'conversationId', chat_conversation_id,
72
+ 'assistantMessageId', message_id,
73
+ 'chatTurnId', chat_turn_id,
74
+ 'turnVariant', coalesce(turn_variant, 0),
75
+ 'issueId', primary_issue_id,
76
+ 'linkedIssueIds', CASE
77
+ WHEN primary_issue_id IS NULL THEN '[]'::jsonb
78
+ ELSE jsonb_build_array(primary_issue_id)
79
+ END,
80
+ 'projectId', NULL,
81
+ 'planMode', plan_mode,
82
+ 'stream', false,
83
+ 'controlIntent', 'backfill'
84
+ ),
85
+ jsonb_build_object(
86
+ 'outcome', 'completed',
87
+ 'backfilled', true,
88
+ 'assistantMessageId', message_id
89
+ ),
90
+ created_at,
91
+ updated_at
92
+ FROM candidates
93
+ RETURNING id
94
+ ),
95
+ updated AS (
96
+ UPDATE "chat_messages" m
97
+ SET "run_id" = c.run_id
98
+ FROM candidates c
99
+ WHERE m.id = c.message_id
100
+ AND m.run_id IS NULL
101
+ AND EXISTS (SELECT 1 FROM inserted i WHERE i.id = c.run_id)
102
+ RETURNING m.id
103
+ )
104
+ SELECT count(*) INTO processed FROM updated;
105
+
106
+ total_processed := total_processed + processed;
107
+ RAISE NOTICE '0090_chat_agent_runs backfilled % chat assistant message run links (% total)', processed, total_processed;
108
+ EXIT WHEN processed < batch_size;
109
+ END LOOP;
110
+ END $$;