63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
|
|
const { Pool } = require('pg');
|
||
|
|
|
||
|
|
export default async function handler(req, res) {
|
||
|
|
try {
|
||
|
|
const pool = new Pool({
|
||
|
|
connectionString: process.env.DATABASE_URL,
|
||
|
|
ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: false } : false,
|
||
|
|
});
|
||
|
|
|
||
|
|
const client = await pool.connect();
|
||
|
|
|
||
|
|
// Test basic connection
|
||
|
|
const result = await client.query('SELECT NOW() as current_time');
|
||
|
|
|
||
|
|
// Test if users table exists
|
||
|
|
const tableCheck = await client.query(`
|
||
|
|
SELECT table_name
|
||
|
|
FROM information_schema.tables
|
||
|
|
WHERE table_schema = 'public'
|
||
|
|
AND table_name IN ('users', 'roles', 'user_roles')
|
||
|
|
`);
|
||
|
|
|
||
|
|
// If users table exists, check for test user
|
||
|
|
let userCheck = null;
|
||
|
|
if (tableCheck.rows.some(row => row.table_name === 'users')) {
|
||
|
|
try {
|
||
|
|
userCheck = await client.query(
|
||
|
|
'SELECT id, username, email FROM users WHERE username = $1',
|
||
|
|
['testuser']
|
||
|
|
);
|
||
|
|
} catch (err) {
|
||
|
|
userCheck = { error: err.message };
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
client.release();
|
||
|
|
|
||
|
|
res.status(200).json({
|
||
|
|
success: true,
|
||
|
|
message: 'Database connection test',
|
||
|
|
timestamp: result.rows[0].current_time,
|
||
|
|
environment: {
|
||
|
|
NODE_ENV: process.env.NODE_ENV,
|
||
|
|
has_database_url: !!process.env.DATABASE_URL,
|
||
|
|
has_jwt_secret: !!process.env.JWT_SECRET
|
||
|
|
},
|
||
|
|
tables: tableCheck.rows.map(row => row.table_name),
|
||
|
|
testUser: userCheck ? {
|
||
|
|
exists: userCheck.rows ? userCheck.rows.length > 0 : false,
|
||
|
|
data: userCheck.rows ? userCheck.rows[0] : null,
|
||
|
|
error: userCheck.error || null
|
||
|
|
} : null
|
||
|
|
});
|
||
|
|
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Database test error:', error);
|
||
|
|
res.status(500).json({
|
||
|
|
success: false,
|
||
|
|
error: error.message,
|
||
|
|
stack: error.stack
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|