mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
sync tables login_users and state_users
This commit is contained in:
parent
163570d34f
commit
65a7b2bfd8
42
database/migrations/0010-login_users_state_users_sync.ts
Normal file
42
database/migrations/0010-login_users_state_users_sync.ts
Normal file
@ -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<Array<any>>) {
|
||||
// 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<Array<any>>) {
|
||||
return [] // cannot undelete things
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user