#!/usr/bin/env node /** * Database Connection Test Script * * This script tests the database connections to help troubleshoot setup issues. */ require('dotenv').config(); const { PrismaClient } = require('@prisma/client'); const mongoose = require('mongoose'); async function testPostgreSQL() { console.log('🐘 Testing PostgreSQL connection...'); const prisma = new PrismaClient(); try { await prisma.$connect(); console.log('āœ… PostgreSQL connection successful!'); // Test a simple query const result = await prisma.$queryRaw`SELECT version()`; console.log('šŸ“Š PostgreSQL version:', result[0]?.version || 'Unknown'); return true; } catch (error) { console.log('āŒ PostgreSQL connection failed:', error.message); console.log('šŸ’” Check your DATABASE_URL in .env file'); return false; } finally { await prisma.$disconnect(); } } async function testMongoDB() { console.log('\nšŸƒ Testing MongoDB connection...'); try { await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true, }); console.log('āœ… MongoDB connection successful!'); // Test a simple operation const adminDb = mongoose.connection.db.admin(); const buildInfo = await adminDb.buildInfo(); console.log('šŸ“Š MongoDB version:', buildInfo.version); return true; } catch (error) { console.log('āŒ MongoDB connection failed:', error.message); console.log('šŸ’” Check your MONGODB_URI in .env file'); console.log('šŸ’” Make sure MongoDB is running on port 27017'); return false; } finally { await mongoose.connection.close(); } } async function testRedis() { console.log('\nšŸ”“ Testing Redis connection...'); try { const Redis = require('ioredis'); const redis = new Redis(process.env.REDIS_URL); await redis.ping(); console.log('āœ… Redis connection successful!'); const info = await redis.info('server'); const version = info.match(/redis_version:([^\r\n]+)/); if (version) { console.log('šŸ“Š Redis version:', version[1]); } redis.disconnect(); return true; } catch (error) { console.log('āŒ Redis connection failed:', error.message); console.log('šŸ’” Check your REDIS_URL in .env file'); console.log('šŸ’” Make sure Redis is running on port 6379'); console.log('šŸ’” You can comment out REDIS_URL if you don\'t need Redis'); return false; } } async function main() { console.log('šŸ” Testing database connections...\n'); const results = { postgresql: await testPostgreSQL(), mongodb: await testMongoDB(), redis: await testRedis(), }; console.log('\nšŸ“‹ Connection Summary:'); console.log(`PostgreSQL: ${results.postgresql ? 'āœ… Connected' : 'āŒ Failed'}`); console.log(`MongoDB: ${results.mongodb ? 'āœ… Connected' : 'āŒ Failed'}`); console.log(`Redis: ${results.redis ? 'āœ… Connected' : 'āŒ Failed'}`); if (results.postgresql && results.mongodb) { console.log('\nšŸŽ‰ Core databases are connected! You can now run:'); console.log(' npm run db:push # Create database schema'); console.log(' npm run db:seed # Seed with sample data'); console.log(' npm run dev # Start development server'); } else { console.log('\nāš ļø Some databases failed to connect. Please check your configuration.'); } if (!results.redis) { console.log('\nšŸ’” Redis is optional. The app will work without it, but caching and background jobs won\'t be available.'); } } main().catch(console.error);