151 lines
4.3 KiB
JavaScript
Executable File
151 lines
4.3 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Script to set up PostgreSQL database for EuchreCamp
|
|
* This script creates the database and runs migrations
|
|
*/
|
|
|
|
const { execSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// Load .env.development file first (if it exists), then .env file
|
|
const envDevPath = path.resolve(__dirname, '..', '.env.development');
|
|
const envPath = path.resolve(__dirname, '..', '.env');
|
|
if (fs.existsSync(envDevPath)) {
|
|
require('dotenv').config({ path: envDevPath });
|
|
}
|
|
if (fs.existsSync(envPath)) {
|
|
require('dotenv').config({ path: envPath });
|
|
}
|
|
|
|
function checkPostgresConnection() {
|
|
try {
|
|
const dbUrl = process.env.DATABASE_URL;
|
|
if (!dbUrl || !dbUrl.startsWith('postgresql://')) {
|
|
console.error('❌ DATABASE_URL is not set for PostgreSQL');
|
|
console.error('Please update your .env file with:');
|
|
console.error('DATABASE_PROVIDER=postgresql');
|
|
console.error('DATABASE_URL="postgresql://euchre_camp:o_7urWjkvPfsE1Q*@localhost:5432/euchre_camp"');
|
|
return false;
|
|
}
|
|
|
|
// Try to connect using psql
|
|
execSync(`psql "${dbUrl}" -c "SELECT 1"`, { stdio: 'pipe' });
|
|
console.log('✅ PostgreSQL connection successful');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('❌ PostgreSQL connection failed:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function createDatabase() {
|
|
try {
|
|
const dbUrl = process.env.DATABASE_URL;
|
|
const dbName = dbUrl.split('/').pop();
|
|
|
|
// Create database if it doesn't exist
|
|
execSync(`psql "${dbUrl}" -c "CREATE DATABASE ${dbName};" 2>/dev/null || true`, { stdio: 'pipe' });
|
|
console.log(`✅ Database "${dbName}" ready`);
|
|
return true;
|
|
} catch (error) {
|
|
console.error('❌ Failed to create database:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function dropDatabase() {
|
|
try {
|
|
const dbUrl = process.env.DATABASE_URL;
|
|
const dbName = dbUrl.split('/').pop();
|
|
|
|
// Drop existing connections and database
|
|
execSync(`psql "${dbUrl}" -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${dbName}' AND pid <> pg_backend_pid();" 2>/dev/null || true`, { stdio: 'pipe' });
|
|
execSync(`psql "${dbUrl}" -c "DROP DATABASE IF EXISTS ${dbName};" 2>/dev/null || true`, { stdio: 'pipe' });
|
|
console.log(`✅ Database "${dbName}" dropped`);
|
|
return true;
|
|
} catch (error) {
|
|
console.error('❌ Failed to drop database:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function runMigrations() {
|
|
try {
|
|
console.log('🔄 Running migrations...');
|
|
execSync('npx prisma migrate deploy', { stdio: 'inherit' });
|
|
console.log('✅ Migrations completed successfully');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('❌ Migration failed:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function generatePrismaClient() {
|
|
try {
|
|
console.log('🔄 Generating Prisma client...');
|
|
execSync('npx prisma generate', { stdio: 'inherit' });
|
|
console.log('✅ Prisma client generated successfully');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('❌ Prisma client generation failed:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function main() {
|
|
const args = process.argv.slice(2);
|
|
const shouldDrop = args.includes('--drop');
|
|
|
|
console.log('=== PostgreSQL Setup for EuchreCamp ===\n');
|
|
|
|
// Check if DATABASE_URL is set
|
|
if (!process.env.DATABASE_URL) {
|
|
console.error('❌ DATABASE_URL environment variable is not set');
|
|
console.error('Please add it to your .env file');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Check PostgreSQL connection
|
|
if (!checkPostgresConnection()) {
|
|
process.exit(1);
|
|
}
|
|
|
|
// Drop database if requested
|
|
if (shouldDrop) {
|
|
console.log('Dropping existing database...');
|
|
if (!dropDatabase()) {
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Create database
|
|
if (!createDatabase()) {
|
|
process.exit(1);
|
|
}
|
|
|
|
// Generate Prisma client
|
|
if (!generatePrismaClient()) {
|
|
process.exit(1);
|
|
}
|
|
|
|
// Run migrations
|
|
if (!runMigrations()) {
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('\n✅ PostgreSQL setup completed successfully!');
|
|
console.log('\nNext steps:');
|
|
console.log('1. Start your development server: npm run dev');
|
|
console.log('2. Test the connection by visiting http://localhost:3000');
|
|
}
|
|
|
|
// Run if called directly
|
|
if (require.main === module) {
|
|
main();
|
|
}
|
|
|
|
module.exports = { checkPostgresConnection, createDatabase, runMigrations, generatePrismaClient };
|