diff --git a/database/migrations/0004-login_server_data.ts b/database/migrations/0004-login_server_data.ts new file mode 100644 index 000000000..34cba5b6f --- /dev/null +++ b/database/migrations/0004-login_server_data.ts @@ -0,0 +1,59 @@ +/* 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>) { + 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\`; + `) +} + +export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { + // 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\`;`) +}