2026-05-14 16:21:02 +07:00
|
|
|
import "dotenv/config";
|
2026-05-14 21:16:03 +07:00
|
|
|
import Database from "better-sqlite3";
|
2026-05-14 23:17:57 +07:00
|
|
|
import { drizzle as drizzleSqlite } from "drizzle-orm/better-sqlite3";
|
2026-05-14 16:21:02 +07:00
|
|
|
import { migrate as migrateSqlite } from "drizzle-orm/better-sqlite3/migrator";
|
2026-05-14 23:17:57 +07:00
|
|
|
import { migrate as migratePostgres } from "drizzle-orm/node-postgres/migrator";
|
2026-05-21 12:03:31 +00:00
|
|
|
import { config } from "../config.js";
|
|
|
|
|
import { createChildLogger } from "../logger.js";
|
|
|
|
|
import { closeDatabase, initializeDatabase } from "./drizzle.js";
|
2026-05-14 16:21:02 +07:00
|
|
|
|
|
|
|
|
const logger = createChildLogger("migrate");
|
|
|
|
|
|
2026-05-14 23:17:57 +07:00
|
|
|
export function initializeMigrationSqliteDatabase(path = ".muxer-queue.db") {
|
|
|
|
|
const sqlite = new Database(path);
|
|
|
|
|
sqlite.pragma("journal_mode = WAL");
|
|
|
|
|
return { sqlite, db: drizzleSqlite(sqlite) };
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-14 16:21:02 +07:00
|
|
|
export async function runMigrations(): Promise<void> {
|
|
|
|
|
try {
|
|
|
|
|
logger.info("Starting database migrations");
|
|
|
|
|
|
|
|
|
|
if (config.DATABASE_TYPE === "postgres") {
|
|
|
|
|
logger.info("Running PostgreSQL migrations");
|
2026-05-14 23:17:57 +07:00
|
|
|
const db = (await initializeDatabase()) as Parameters<
|
|
|
|
|
typeof migratePostgres
|
|
|
|
|
>[0];
|
|
|
|
|
try {
|
|
|
|
|
await migratePostgres(db, { migrationsFolder: "./drizzle/migrations" });
|
|
|
|
|
} finally {
|
|
|
|
|
await closeDatabase();
|
|
|
|
|
}
|
2026-05-14 16:21:02 +07:00
|
|
|
logger.info("PostgreSQL migrations completed successfully");
|
|
|
|
|
} else {
|
|
|
|
|
logger.info("Running SQLite migrations");
|
2026-05-14 23:17:57 +07:00
|
|
|
const { sqlite, db } = initializeMigrationSqliteDatabase();
|
|
|
|
|
try {
|
|
|
|
|
migrateSqlite(db, { migrationsFolder: "./drizzle/migrations" });
|
|
|
|
|
} finally {
|
|
|
|
|
sqlite.close();
|
|
|
|
|
}
|
2026-05-14 16:21:02 +07:00
|
|
|
logger.info("SQLite migrations completed successfully");
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
logger.error(
|
|
|
|
|
{ error: error instanceof Error ? error.message : String(error) },
|
2026-05-14 20:03:02 +07:00
|
|
|
"Migration failed",
|
2026-05-14 16:21:02 +07:00
|
|
|
);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-14 23:17:57 +07:00
|
|
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
2026-05-14 16:21:02 +07:00
|
|
|
runMigrations()
|
|
|
|
|
.then(() => {
|
|
|
|
|
logger.info("Migrations completed");
|
|
|
|
|
process.exit(0);
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
logger.error({ error }, "Migration failed");
|
|
|
|
|
process.exit(1);
|
|
|
|
|
});
|
|
|
|
|
}
|