From 4a27fa07f0de17732c529e7b0c4dbc3c55b5fba3 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 1 Dec 2022 14:49:56 +0100 Subject: [PATCH 1/3] fix(database): consistent deleted at bewteen users and user contacts --- .../0055-consistent_deleted_users.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 database/migrations/0055-consistent_deleted_users.ts diff --git a/database/migrations/0055-consistent_deleted_users.ts b/database/migrations/0055-consistent_deleted_users.ts new file mode 100644 index 000000000..e4f2df87f --- /dev/null +++ b/database/migrations/0055-consistent_deleted_users.ts @@ -0,0 +1,26 @@ +/* MIGRATION TO soft delete user contacts of soft deleted users */ + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { + const contactsToFix = await queryFn(` + SELECT user_contacts.id, users.deleted_at + FROM user_contacts JOIN users ON users.email_id = user_contacts.id + WHERE user_contacts.deleted_at IS NULL + AND user_id IN (SELECT id FROM users WHERE deleted_at IS NOT NULL);`) + + for (let i = 0; i < contactsToFix.length; i++) { + const deletedAt = new Date(contactsToFix[i].deleted_at) + .toISOString() + .slice(0, 19) + .replace('T', ' ') + + await queryFn(` + UPDATE user_contacts SET deleted_at = '${deletedAt}' WHERE id = ${contactsToFix[i].id};`) + } +} + +/* eslint-disable @typescript-eslint/no-empty-function */ +/* eslint-disable-next-line @typescript-eslint/no-unused-vars */ +export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) {} From 7f1e69c1bdf0e109c9a48b1a254558e17b5e45d5 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 1 Dec 2022 14:52:08 +0100 Subject: [PATCH 2/3] update database version --- backend/src/config/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index c9e5ea79f..ee99ef809 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -10,7 +10,7 @@ Decimal.set({ }) const constants = { - DB_VERSION: '0054-recalculate_balance_and_decay', + DB_VERSION: '0055-consistent_deleted_users', DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 LOG4JS_CONFIG: 'log4js-config.json', // default log level on production should be info From c449e41cfb6fe3ac86a8b0b0ddfeb24d63a41c09 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 12 Dec 2022 12:45:17 +0100 Subject: [PATCH 3/3] update only by SQL, thanks @ulfgebhardt --- .../0055-consistent_deleted_users.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/database/migrations/0055-consistent_deleted_users.ts b/database/migrations/0055-consistent_deleted_users.ts index e4f2df87f..561e0541a 100644 --- a/database/migrations/0055-consistent_deleted_users.ts +++ b/database/migrations/0055-consistent_deleted_users.ts @@ -4,21 +4,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { - const contactsToFix = await queryFn(` - SELECT user_contacts.id, users.deleted_at - FROM user_contacts JOIN users ON users.email_id = user_contacts.id + await queryFn(` + UPDATE user_contacts LEFT JOIN users ON users.email_id = user_contacts.id + SET user_contacts.deleted_at = users.deleted_at WHERE user_contacts.deleted_at IS NULL - AND user_id IN (SELECT id FROM users WHERE deleted_at IS NOT NULL);`) - - for (let i = 0; i < contactsToFix.length; i++) { - const deletedAt = new Date(contactsToFix[i].deleted_at) - .toISOString() - .slice(0, 19) - .replace('T', ' ') - - await queryFn(` - UPDATE user_contacts SET deleted_at = '${deletedAt}' WHERE id = ${contactsToFix[i].id};`) - } + AND users.deleted_at IS NOT NULL;`) } /* eslint-disable @typescript-eslint/no-empty-function */