120 lines
3.1 KiB
TypeScript
120 lines
3.1 KiB
TypeScript
import { loadSync } from "$std/dotenv/mod.ts";
|
|
loadSync({ allowEmptyValues: true, export: true });
|
|
import { Pool } from "pg";
|
|
|
|
const pool = new Pool({
|
|
connectionString: Deno.env.get("POSTGRES_OPTIONS")?.replace(
|
|
"postgresql://",
|
|
"postgres://",
|
|
),
|
|
});
|
|
|
|
async function verifySchema() {
|
|
const client = await pool.connect();
|
|
|
|
try {
|
|
console.log("Testing database connection...");
|
|
|
|
// Test connection with a simple query
|
|
const result = await client.query(`
|
|
SELECT table_name
|
|
FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
ORDER BY table_name
|
|
`);
|
|
|
|
console.log("✅ Database connection established");
|
|
|
|
// Expected tables
|
|
const expectedTables = [
|
|
"users",
|
|
"roles",
|
|
"user_roles",
|
|
"state_keys",
|
|
"user_tokens",
|
|
"web_tokens",
|
|
"obligations",
|
|
"incomes",
|
|
"financial_balances",
|
|
"properties",
|
|
"rent_schedules",
|
|
"leases",
|
|
"payment_methods",
|
|
"property_media",
|
|
"lease_documents",
|
|
"tenant_applications",
|
|
"tenant_invites",
|
|
"payment_transactions",
|
|
"reminders",
|
|
"messages",
|
|
"maintenance_requests",
|
|
"user_pins",
|
|
"session_configs",
|
|
];
|
|
|
|
const existingTables = result.rows.map((row) => String(row["table_name"]));
|
|
|
|
console.log("\n📋 Existing tables:", existingTables);
|
|
console.log("📋 Total tables:", existingTables.length);
|
|
|
|
const missingTables = expectedTables.filter(
|
|
(table) => !existingTables.includes(table),
|
|
);
|
|
|
|
if (missingTables.length > 0) {
|
|
console.error("\n❌ Missing tables:", missingTables);
|
|
Deno.exit(1);
|
|
} else {
|
|
console.log("\n✅ All expected tables exist in database!");
|
|
}
|
|
|
|
// Verify key columns on critical tables
|
|
console.log("\n🔍 Verifying key columns...");
|
|
|
|
const usersColumns = await client.query(`
|
|
SELECT column_name
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'users' AND table_schema = 'public'
|
|
ORDER BY column_name
|
|
`);
|
|
console.log(
|
|
"✅ users table columns:",
|
|
usersColumns.rows.map((r) => r["column_name"]),
|
|
);
|
|
|
|
const propertiesColumns = await client.query(`
|
|
SELECT column_name
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'properties' AND table_schema = 'public'
|
|
ORDER BY column_name
|
|
`);
|
|
console.log(
|
|
"✅ properties table columns:",
|
|
propertiesColumns.rows.map((r) => r["column_name"]),
|
|
);
|
|
|
|
const leasesColumns = await client.query(`
|
|
SELECT column_name
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'leases' AND table_schema = 'public'
|
|
ORDER BY column_name
|
|
`);
|
|
console.log(
|
|
"✅ leases table columns:",
|
|
leasesColumns.rows.map((r) => r["column_name"]),
|
|
);
|
|
|
|
console.log("\n✅ Database schema verification complete!");
|
|
client.release();
|
|
await pool.end();
|
|
Deno.exit(0);
|
|
} catch (error) {
|
|
console.error("❌ Database schema verification failed:", error);
|
|
client.release();
|
|
await pool.end();
|
|
Deno.exit(1);
|
|
}
|
|
}
|
|
|
|
verifySchema();
|