mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-03 17:50:41 +10:00
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { sql } from "drizzle-orm";
|
|
import { drizzle } from "drizzle-orm/node-postgres";
|
|
import { Pool } from "pg";
|
|
import { env } from "@/utils/env";
|
|
|
|
export async function resetDatabase() {
|
|
console.log("⌛ Resetting database...");
|
|
|
|
const pool = new Pool({ connectionString: env.DATABASE_URL });
|
|
const db = drizzle({ client: pool });
|
|
|
|
// Extract the username from a PostgreSQL connection string like: postgresql://postgres:password@localhost:5432/db
|
|
const username = (() => {
|
|
try {
|
|
const match = env.DATABASE_URL.match(/^postgres(?:ql)?:\/\/([^:]+):[^@]+@/);
|
|
return match ? match[1] : undefined;
|
|
} catch {
|
|
return undefined;
|
|
}
|
|
})();
|
|
|
|
console.log("🔑 Username:", username);
|
|
|
|
try {
|
|
await db.transaction(async (tx) => {
|
|
await tx.execute(sql`DROP SCHEMA drizzle CASCADE`);
|
|
await tx.execute(sql`CREATE SCHEMA drizzle`);
|
|
await tx.execute(sql.raw(`GRANT ALL ON SCHEMA drizzle TO ${username}`));
|
|
|
|
await tx.execute(sql`DROP SCHEMA public CASCADE`);
|
|
await tx.execute(sql`CREATE SCHEMA public`);
|
|
await tx.execute(sql.raw(`GRANT ALL ON SCHEMA public TO ${username}`));
|
|
});
|
|
|
|
console.log("✅ Database reset completed");
|
|
} catch (error) {
|
|
console.error("🚨 Database reset failed:", error);
|
|
} finally {
|
|
await pool.end();
|
|
}
|
|
}
|
|
|
|
if (import.meta.main) {
|
|
await resetDatabase();
|
|
}
|