fosrl.pangolin/server/db/sqlite/migrate.ts

54 lines
1.6 KiB
TypeScript
Raw Normal View History

import { migrate } from "drizzle-orm/better-sqlite3/migrator";
2025-06-04 12:02:07 -04:00
import db from "./driver";
2024-09-28 22:50:10 -04:00
import path from "path";
import { location } from "./driver";
import Database from "better-sqlite3";
import type { Database as BetterSqlite3Database } from "better-sqlite3";
2024-09-28 13:31:22 -04:00
2024-09-29 21:09:35 -04:00
const migrationsFolder = path.join("server/migrations");
2024-09-29 15:39:58 -04:00
const dropAllTables = (sqlite: BetterSqlite3Database) => {
console.log("Dropping all existing tables...");
// Disable foreign key checks
sqlite.pragma('foreign_keys = OFF');
// Get all tables
const tables = sqlite.prepare(`
SELECT name FROM sqlite_master
WHERE type='table'
AND name NOT LIKE 'sqlite_%'
`).all() as { name: string }[];
// Drop each table
for (const table of tables) {
console.log(`Dropping table: ${table.name}`);
sqlite.prepare(`DROP TABLE IF EXISTS "${table.name}"`).run();
}
// Re-enable foreign key checks
sqlite.pragma('foreign_keys = ON');
};
2024-09-28 13:31:22 -04:00
const runMigrations = async () => {
console.log("Running migrations...");
try {
// Initialize the database file with a valid SQLite header
const sqlite = new Database(location) as BetterSqlite3Database;
// Drop all existing tables first
dropAllTables(sqlite);
// Run the migrations
2025-05-12 17:21:03 -04:00
migrate(db as any, {
2024-09-29 15:39:58 -04:00
migrationsFolder: migrationsFolder,
2024-09-28 22:50:10 -04:00
});
console.log("Migrations completed successfully.");
} catch (error) {
console.error("Error running migrations:", error);
process.exit(1);
}
2024-09-28 13:31:22 -04:00
};
runMigrations();