From 65a7b2bfd852cf1ba44025fa5a4c0fc76e7f27b8 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 20 Jan 2022 13:49:28 +0100 Subject: [PATCH] sync tables login_users and state_users --- .../0010-login_users_state_users_sync.ts | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 database/migrations/0010-login_users_state_users_sync.ts diff --git a/database/migrations/0010-login_users_state_users_sync.ts b/database/migrations/0010-login_users_state_users_sync.ts new file mode 100644 index 000000000..12b042355 --- /dev/null +++ b/database/migrations/0010-login_users_state_users_sync.ts @@ -0,0 +1,42 @@ +/* MIGRATION TO CLEAN PRODUCTION DATA + * + * login_users and state_users are not in sync. + * Copy missing data from login_users to state_users. + */ + +export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { + // Copy data with intact private key + await queryFn( + `INSERT INTO state_users + (public_key, email, first_name, last_name, username, disabled) + (SELECT pubkey as public_key, email, first_name, last_name, username, disabled + FROM login_users + WHERE email NOT IN (SELECT email from state_users) AND privkey IS NOT NULL + )`, + ) + // Copy data without intact private key, generate random pubkey + await queryFn( + `INSERT INTO state_users + (public_key, email, first_name, last_name, username, disabled) + (SELECT UNHEX(SHA1(RAND())) as public_key, email, first_name, last_name, username, disabled + FROM login_users + WHERE email NOT IN (SELECT email from state_users) AND privkey IS NULL + )`, + ) + // Remove duplicate data from state_users with dead pubkeys + await queryFn( + `DELETE FROM state_users + WHERE id IN + (SELECT state_users.id FROM state_users + WHERE public_key NOT IN + (SELECT pubkey FROM login_users + WHERE pubkey IS NOT NULL) + AND email IN (SELECT email FROM state_users GROUP BY email HAVING COUNT(*) > 1 + ) + )`, + ) +} + +export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { + return [] // cannot undelete things +}