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();