diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 79a7d0ab..b8fa64f0 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -27,6 +27,7 @@ import m22 from "./scriptsSqlite/1.7.0"; import m23 from "./scriptsSqlite/1.8.0"; import m24 from "./scriptsSqlite/1.9.0"; import m25 from "./scriptsSqlite/1.10.0"; +import m26 from "./scriptsSqlite/1.10.1"; // THIS CANNOT IMPORT ANYTHING FROM THE SERVER // EXCEPT FOR THE DATABASE AND THE SCHEMA @@ -53,6 +54,7 @@ const migrations = [ { version: "1.8.0", run: m23 }, { version: "1.9.0", run: m24 }, { version: "1.10.0", run: m25 }, + { version: "1.10.1", run: m26 }, // Add new migrations here as they are created ] as const; diff --git a/server/setup/scriptsSqlite/1.10.1.ts b/server/setup/scriptsSqlite/1.10.1.ts new file mode 100644 index 00000000..4572c8ee --- /dev/null +++ b/server/setup/scriptsSqlite/1.10.1.ts @@ -0,0 +1,77 @@ +import { __DIRNAME, APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.10.1"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + + db.transaction(() => { + db.exec(`PRAGMA foreign_keys = OFF; + +-- 1. Rename the old table +ALTER TABLE targets RENAME TO targets_old; + +-- 2. Create the new table +CREATE TABLE targets ( + targetId INTEGER PRIMARY KEY AUTOINCREMENT, + resourceId INTEGER NOT NULL, + siteId INTEGER NOT NULL, + ip TEXT NOT NULL, + method TEXT, + port INTEGER NOT NULL, + internalPort INTEGER, + enabled INTEGER NOT NULL DEFAULT 1, + path TEXT, + pathMatchType TEXT, + FOREIGN KEY (resourceId) REFERENCES resources(resourceId) ON DELETE CASCADE, + FOREIGN KEY (siteId) REFERENCES sites(siteId) ON DELETE CASCADE +); + +-- 3. Copy data *from the old table* +INSERT INTO targets ( + targetId, + resourceId, + siteId, + ip, + method, + port, + internalPort, + enabled, + path, + pathMatchType +) +SELECT + targetId, + resourceId, + siteId, + ip, + method, + port, + internalPort, + enabled, + path, + pathMatchType +FROM targets_old; + +-- 4. Drop the old table +DROP TABLE targets_old; + +PRAGMA foreign_keys = ON;`); + }); + + db.pragma("foreign_keys = ON"); + + console.log(`Migrated database`); + } catch (e) { + console.log("Failed to migrate db:", e); + throw e; + } +}