From 0d616382f78257a7ee97a472b8aeb464c6d7d1e7 Mon Sep 17 00:00:00 2001 From: Tushar Ahire Date: Sat, 25 Jan 2025 19:37:01 +0530 Subject: [PATCH 1/4] fix: adds unique index on note and user id of teams table --- src/repository/storage/postgres/orm/sequelize/teams.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/repository/storage/postgres/orm/sequelize/teams.ts b/src/repository/storage/postgres/orm/sequelize/teams.ts index 5dfc0cd5..fc97a5cc 100644 --- a/src/repository/storage/postgres/orm/sequelize/teams.ts +++ b/src/repository/storage/postgres/orm/sequelize/teams.ts @@ -103,6 +103,13 @@ export default class TeamsSequelizeStorage { tableName: this.tableName, sequelize: this.database, timestamps: false, + indexes: [ + // Create a unique index on noteId and userId + { + unique: true, + fields: ['noteId', 'userId'], + }, + ], }); } From e4f05db0674b60e6263539107dcf4f0790207786 Mon Sep 17 00:00:00 2001 From: Tushar504 Date: Wed, 5 Feb 2025 11:00:06 +0000 Subject: [PATCH 2/4] feat: adds migration file for unique index --- .../0035-note-teams@add-unique-index-on-note-and-user-id.sql | 2 ++ src/repository/storage/postgres/orm/sequelize/teams.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql diff --git a/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql b/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql new file mode 100644 index 00000000..4a121f19 --- /dev/null +++ b/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql @@ -0,0 +1,2 @@ +CREATE UNIQUE INDEX IF NOT EXISTS note_teams_note_id_user_id_unique_idx +ON public.note_teams (note_id, user_id); \ No newline at end of file diff --git a/src/repository/storage/postgres/orm/sequelize/teams.ts b/src/repository/storage/postgres/orm/sequelize/teams.ts index fc97a5cc..d8bab53a 100644 --- a/src/repository/storage/postgres/orm/sequelize/teams.ts +++ b/src/repository/storage/postgres/orm/sequelize/teams.ts @@ -107,7 +107,7 @@ export default class TeamsSequelizeStorage { // Create a unique index on noteId and userId { unique: true, - fields: ['noteId', 'userId'], + fields: ['note_id', 'user_id'], }, ], }); From 0611bd6b84cd0e54a37f172191a032e6411ab37d Mon Sep 17 00:00:00 2001 From: Tushar Ahire Date: Wed, 5 Feb 2025 18:59:21 +0530 Subject: [PATCH 3/4] fix: fix test case of noteSsettings --- src/presentation/http/router/noteSettings.test.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/presentation/http/router/noteSettings.test.ts b/src/presentation/http/router/noteSettings.test.ts index 8a9bba9a..3043e07e 100644 --- a/src/presentation/http/router/noteSettings.test.ts +++ b/src/presentation/http/router/noteSettings.test.ts @@ -762,12 +762,6 @@ describe('NoteSettings API', () => { creatorId: user.id, }); - await global.db.insertNoteTeam({ - noteId: note.id, - userId: user.id, - role: MemberRole.Write, - }); - const accessToken = global.auth(user.id); const response = await global.api?.fakeRequest({ From 7bf4dfe4301b918be3f5ae7b77b0fe6b8248bf97 Mon Sep 17 00:00:00 2001 From: Tushar Ahire Date: Wed, 5 Feb 2025 21:54:09 +0530 Subject: [PATCH 4/4] fix : fix migration script --- ...ams@add-unique-index-on-note-and-user-id.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql b/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql index 4a121f19..b9241fc8 100644 --- a/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql +++ b/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql @@ -1,2 +1,19 @@ +-- remove exists duplicate entries from database +DELETE FROM note_teams +WHERE id IN ( + SELECT id + FROM ( + SELECT + id, + ROW_NUMBER() OVER ( + PARTITION BY note_id, user_id + ORDER BY id + ) AS row_num + FROM note_teams + ) AS duplicates + WHERE duplicates.row_num > 1 +); + +-- adds unique index CREATE UNIQUE INDEX IF NOT EXISTS note_teams_note_id_user_id_unique_idx ON public.note_teams (note_id, user_id); \ No newline at end of file