mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
75 lines
3.0 KiB
TypeScript
75 lines
3.0 KiB
TypeScript
/* FIRST MIGRATION
|
|
*
|
|
* This migration is special since it takes into account that
|
|
* the database can be setup already but also may not be.
|
|
* Therefore you will find all `CREATE TABLE` statements with
|
|
* a `IF NOT EXISTS`, all `INSERT` with an `IGNORE` and in the
|
|
* downgrade function all `DROP TABLE` with a `IF EXISTS`.
|
|
* This ensures compatibility for existing or non-existing
|
|
* databases.
|
|
*/
|
|
|
|
const LOGIN_SERVER_DB = 'gradido_login'
|
|
|
|
export async function upgrade(queryFn: (query: string, values?: any[]) => Promise<Array<any>>) {
|
|
const loginDatabaseExists = await queryFn(`
|
|
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${LOGIN_SERVER_DB}'
|
|
`)
|
|
if (loginDatabaseExists.length === 0) {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Skipping Login Server Database migration - Database ${LOGIN_SERVER_DB} not found`)
|
|
return
|
|
}
|
|
|
|
await queryFn(`
|
|
INSERT INTO \`login_app_access_tokens\` SELECT * FROM ${LOGIN_SERVER_DB}.\`app_access_tokens\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_elopage_buys\` SELECT * FROM ${LOGIN_SERVER_DB}.\`elopage_buys\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_email_opt_in_types\` SELECT * FROM ${LOGIN_SERVER_DB}.\`email_opt_in_types\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_email_opt_in\` SELECT * FROM ${LOGIN_SERVER_DB}.\`email_opt_in\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_groups\` SELECT * FROM ${LOGIN_SERVER_DB}.\`groups\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_pending_tasks\` SELECT * FROM ${LOGIN_SERVER_DB}.\`pending_tasks\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_roles\` SELECT * FROM ${LOGIN_SERVER_DB}.\`roles\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_user_backups\` SELECT * FROM ${LOGIN_SERVER_DB}.\`user_backups\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_user_roles\` SELECT * FROM ${LOGIN_SERVER_DB}.\`user_roles\`;
|
|
`)
|
|
await queryFn(`
|
|
INSERT INTO \`login_users\` SELECT * FROM ${LOGIN_SERVER_DB}.\`users\`;
|
|
`)
|
|
|
|
// TODO clarify if we need this on non docker environment?
|
|
await queryFn(`
|
|
INSERT IGNORE INTO \`login_groups\` (\`id\`, \`alias\`, \`name\`, \`url\`, \`host\`, \`home\`, \`description\`) VALUES
|
|
(1, 'docker', 'docker gradido group', 'localhost', 'nginx', '/', 'gradido test group for docker and stage2 with blockchain db');
|
|
`)
|
|
}
|
|
|
|
export async function downgrade(queryFn: (query: string, values?: any[]) => Promise<Array<any>>) {
|
|
// write downgrade logic as parameter of queryFn
|
|
await queryFn(`DELETE FROM \`login_app_access_tokens\`;`)
|
|
await queryFn(`DELETE FROM \`login_elopage_buys\`;`)
|
|
await queryFn(`DELETE FROM \`login_email_opt_in_types\`;`)
|
|
await queryFn(`DELETE FROM \`login_email_opt_in\`;`)
|
|
await queryFn(`DELETE FROM \`login_groups\`;`)
|
|
await queryFn(`DELETE FROM \`login_pending_tasks\`;`)
|
|
await queryFn(`DELETE FROM \`login_roles\`;`)
|
|
await queryFn(`DELETE FROM \`login_user_backups\`;`)
|
|
await queryFn(`DELETE FROM \`login_user_roles\`;`)
|
|
await queryFn(`DELETE FROM \`login_users\`;`)
|
|
}
|