deckhearth/api/test-db.ts
Randall Stillwell 0531f25cbb Add debugging tools and optimize auth endpoints
🔧 Debugging Improvements:
- Optimize setup-auth endpoint to avoid timeouts
- Add table existence checks before operations
- Simplify permission system for faster setup
- Add environment variable validation
- Create test-db endpoint for connection debugging

🚀 Performance Optimizations:
- Break down large SQL queries into smaller chunks
- Add early returns for already-setup scenarios
- Reduce permission complexity during initial setup
- Better error messages for troubleshooting

🧪 New Debug Endpoints:
- /api/test-db - Test database connectivity
- /api/setup-auth - Optimized schema setup

These changes should resolve timeout issues and provide better debugging information for authentication problems.
2025-07-21 21:39:08 -05:00

86 lines
No EOL
2.6 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { Pool } from 'pg';
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: false } : false,
});
export default async function handler(req: NextRequest) {
if (req.method !== 'GET') {
return new NextResponse(JSON.stringify({ error: 'Method not allowed' }), {
status: 405,
headers: { 'Content-Type': 'application/json' },
});
}
const client = await pool.connect();
try {
console.log('Testing database connection...');
// Test basic connection
const result = await client.query('SELECT NOW() as current_time, version() as postgres_version');
// Check if users table exists
const tableCheck = await client.query(`
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'users'
) as users_table_exists;
`);
// Check if cards table exists
const cardsCheck = await client.query(`
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'cards'
) as cards_table_exists;
`);
// Get table counts
let userCount = 0;
let cardCount = 0;
if (tableCheck.rows[0].users_table_exists) {
const userCountResult = await client.query('SELECT COUNT(*) as count FROM users');
userCount = parseInt(userCountResult.rows[0].count);
}
if (cardsCheck.rows[0].cards_table_exists) {
const cardCountResult = await client.query('SELECT COUNT(*) as count FROM cards');
cardCount = parseInt(cardCountResult.rows[0].count);
}
return new NextResponse(JSON.stringify({
success: true,
message: 'Database connection successful',
database_info: {
current_time: result.rows[0].current_time,
postgres_version: result.rows[0].postgres_version,
users_table_exists: tableCheck.rows[0].users_table_exists,
cards_table_exists: cardsCheck.rows[0].cards_table_exists,
user_count: userCount,
card_count: cardCount
}
}), {
status: 200,
headers: { 'Content-Type': 'application/json' },
});
} catch (error) {
console.error('Database connection failed:', error);
return new NextResponse(JSON.stringify({
success: false,
error: 'Database connection failed',
details: (error as Error).message
}), {
status: 500,
headers: { 'Content-Type': 'application/json' },
});
} finally {
client.release();
}
}