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..b9241fc8 --- /dev/null +++ b/migrations/tenant/0035-note-teams@add-unique-index-on-note-and-user-id.sql @@ -0,0 +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 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({ diff --git a/src/repository/storage/postgres/orm/sequelize/teams.ts b/src/repository/storage/postgres/orm/sequelize/teams.ts index 5dfc0cd5..d8bab53a 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: ['note_id', 'user_id'], + }, + ], }); }