From 377993e4b034a8be40b1eaec86e0a4ccd5490208 Mon Sep 17 00:00:00 2001 From: Jader Santos Date: Fri, 21 Nov 2025 21:40:27 -0300 Subject: [PATCH 1/2] fix(prisma): add unique constraint to Chat model in Postgres Generated migration to add unique index on instanceId and remoteJid. --- .../migration.sql | 2 ++ prisma/postgresql-schema.prisma | 1 + 2 files changed, 3 insertions(+) create mode 100644 prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql diff --git a/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql b/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql new file mode 100644 index 000000000..572549016 --- /dev/null +++ b/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +CREATE UNIQUE INDEX "Chat_instanceId_remoteJid_key" ON "Chat"("instanceId", "remoteJid"); diff --git a/prisma/postgresql-schema.prisma b/prisma/postgresql-schema.prisma index e14f8d492..6b98f88da 100644 --- a/prisma/postgresql-schema.prisma +++ b/prisma/postgresql-schema.prisma @@ -132,6 +132,7 @@ model Chat { instanceId String unreadMessages Int @default(0) + @@unique([instanceId, remoteJid]) @@index([instanceId]) @@index([remoteJid]) } From 1e036ba3ae1460ca033c4737d16d608f7952526c Mon Sep 17 00:00:00 2001 From: Jader Santos Date: Fri, 21 Nov 2025 22:09:15 -0300 Subject: [PATCH 2/2] fix(migration): add deduplication step before creating index --- .../migration.sql | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql b/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql index 572549016..8b27cc1ef 100644 --- a/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql +++ b/prisma/postgresql-migrations/20251122003044_add_chat_instance_remotejid_unique/migration.sql @@ -1,2 +1,16 @@ --- AlterTable +-- 1. Cleanup: Remove duplicate chats, keeping the most recently updated one +DELETE FROM "Chat" +WHERE id IN ( + SELECT id FROM ( + SELECT id, + ROW_NUMBER() OVER ( + PARTITION BY "instanceId", "remoteJid" + ORDER BY "updatedAt" DESC + ) as row_num + FROM "Chat" + ) t + WHERE t.row_num > 1 +); + +-- 2. Create the unique index (Constraint) CREATE UNIQUE INDEX "Chat_instanceId_remoteJid_key" ON "Chat"("instanceId", "remoteJid");