mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-06 19:02:33 +01:00
110 lines
2.1 KiB
JavaScript
110 lines
2.1 KiB
JavaScript
const { config } = require("dotenv");
|
|
config();
|
|
const { createConnection } = require("typeorm");
|
|
const { initDatabase } = require("../../dist/util/Database");
|
|
require("missing-native-js-functions");
|
|
const {
|
|
Application,
|
|
Attachment,
|
|
Ban,
|
|
Channel,
|
|
ConfigEntity,
|
|
ConnectedAccount,
|
|
Emoji,
|
|
Guild,
|
|
Invite,
|
|
Member,
|
|
Message,
|
|
ReadState,
|
|
Recipient,
|
|
Relationship,
|
|
Role,
|
|
Sticker,
|
|
Team,
|
|
TeamMember,
|
|
Template,
|
|
User,
|
|
VoiceState,
|
|
Webhook,
|
|
} = require("../../dist/entities/index");
|
|
|
|
async function main() {
|
|
if (!process.env.TO) throw new Error("TO database env connection string not set");
|
|
|
|
// manually arrange them because of foreign keys
|
|
const entities = [
|
|
ConfigEntity,
|
|
User,
|
|
Guild,
|
|
Channel,
|
|
Invite,
|
|
Role,
|
|
Ban,
|
|
Application,
|
|
Emoji,
|
|
ConnectedAccount,
|
|
Member,
|
|
ReadState,
|
|
Recipient,
|
|
Relationship,
|
|
Sticker,
|
|
Team,
|
|
TeamMember,
|
|
Template,
|
|
VoiceState,
|
|
Webhook,
|
|
Message,
|
|
Attachment,
|
|
];
|
|
|
|
const oldDB = await initDatabase();
|
|
|
|
const type = process.env.TO.includes("://") ? process.env.TO.split(":")[0]?.replace("+srv", "") : "sqlite";
|
|
const isSqlite = type.includes("sqlite");
|
|
|
|
// @ts-ignore
|
|
const newDB = await createConnection({
|
|
type,
|
|
url: isSqlite ? undefined : process.env.TO,
|
|
database: isSqlite ? process.env.TO : undefined,
|
|
entities,
|
|
name: "new",
|
|
synchronize: true,
|
|
});
|
|
let i = 0;
|
|
|
|
try {
|
|
for (const entity of entities) {
|
|
const entries = await oldDB.manager.find(entity);
|
|
|
|
// @ts-ignore
|
|
console.log("migrating " + entries.length + " " + entity.name + " ...");
|
|
|
|
for (const entry of entries) {
|
|
console.log(i++);
|
|
|
|
try {
|
|
await newDB.manager.insert(entity, entry);
|
|
} catch (error) {
|
|
try {
|
|
if (!entry.id) throw new Error("object doesn't have a unique id: " + entry);
|
|
await newDB.manager.update(entity, { id: entry.id }, entry);
|
|
} catch (error) {
|
|
console.error("couldn't migrate " + i + " " + entity.name, error);
|
|
}
|
|
}
|
|
}
|
|
|
|
// @ts-ignore
|
|
console.log("migrated " + entries.length + " " + entity.name);
|
|
}
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
}
|
|
|
|
console.log("SUCCESS migrated all data");
|
|
await newDB.close();
|
|
}
|
|
|
|
main().caught();
|