diff options
Diffstat (limited to 'util/src/migrations/migrate_db_engine.ts')
-rw-r--r-- | util/src/migrations/migrate_db_engine.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/util/src/migrations/migrate_db_engine.ts b/util/src/migrations/migrate_db_engine.ts new file mode 100644 index 00000000..b2e71f94 --- /dev/null +++ b/util/src/migrations/migrate_db_engine.ts @@ -0,0 +1,47 @@ +import { config } from "dotenv"; +config(); +import * as Models from "../entities"; +import { User } from "../entities/User"; +import { createConnection, Connection } from "typeorm"; +import { initDatabase } from "../util/Database"; +import "missing-native-js-functions"; + +async function main() { + if (!process.env.FROM) throw new Error("FROM database env connection string not set"); + + // @ts-ignore + const entities = Object.values(Models).filter((x) => x.constructor.name !== "Object" && x.name); + + const newDB = await initDatabase(); + + // @ts-ignore + const oldDB = await createConnection({ + type: process.env.FROM.split(":")[0]?.replace("+srv", ""), + url: process.env.FROM, + entities, + name: "old", + }); + + await Promise.all( + entities.map(async (x) => { + const data = await oldDB.manager.find(User); + + await Promise.all( + data.map(async (x) => { + try { + await newDB.manager.insert(User, x); + } catch (error) { + if (!x.id) throw new Error("object doesn't have a unique id: " + x); + await newDB.manager.update(User, { id: x.id }, x); + } + }) + ); + // @ts-ignore + console.log("migrated all " + x.name); + }) + ); + + console.log("SUCCESS migrated all data"); +} + +main().caught(); |