80 lines
2.6 KiB
JavaScript
Executable File
80 lines
2.6 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Reset Development Database
|
|
*
|
|
* Drops and recreates the development database with a clean state.
|
|
* Useful for development and testing.
|
|
*/
|
|
|
|
const { execSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// Load environment variables - prioritize explicit DEV_DATABASE_URL
|
|
// Falls back to DATABASE_URL, then .env.development
|
|
const envPath = path.resolve(__dirname, '..', '.env.development');
|
|
if (fs.existsSync(envPath)) {
|
|
require('dotenv').config({ path: envPath });
|
|
}
|
|
|
|
// Use DEV_DATABASE_URL if set, otherwise use DATABASE_URL
|
|
const databaseUrl = process.env.DEV_DATABASE_URL || process.env.DATABASE_URL;
|
|
|
|
// Check if database URL is set
|
|
if (!databaseUrl) {
|
|
console.error('❌ No database URL set');
|
|
console.error('Please set DEV_DATABASE_URL or DATABASE_URL environment variable');
|
|
console.error('Or ensure .env.development file exists with DATABASE_URL');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Validate that we're using the dev database
|
|
if (!databaseUrl.includes('_dev') && !databaseUrl.includes('_dev_')) {
|
|
console.error('❌ ERROR: This script should only be used with the development database!');
|
|
console.error(' Current URL:', databaseUrl);
|
|
console.error(' Expected pattern: euchre_camp_dev');
|
|
console.error(' Please set DEV_DATABASE_URL for development database operations.');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Extract database name from URL
|
|
const dbUrl = databaseUrl;
|
|
const dbName = dbUrl.split('/').pop();
|
|
|
|
console.log('🔄 Resetting development database...\n');
|
|
console.log(`Database: ${dbName}`);
|
|
console.log(`URL: ${dbUrl}\n`);
|
|
|
|
try {
|
|
// Drop existing connections
|
|
console.log('Dropping existing connections...');
|
|
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' }
|
|
);
|
|
|
|
// Drop the database
|
|
console.log('Dropping database...');
|
|
execSync(
|
|
`psql "${dbUrl}" -c "DROP DATABASE IF EXISTS ${dbName};" 2>/dev/null || true`,
|
|
{ stdio: 'pipe' }
|
|
);
|
|
|
|
// Recreate the database
|
|
console.log('Creating database...');
|
|
execSync(`psql "${dbUrl}" -c "CREATE DATABASE ${dbName};"`, { stdio: 'pipe' });
|
|
|
|
// Run migrations
|
|
console.log('Running migrations...');
|
|
execSync('npx prisma migrate deploy', { stdio: 'inherit' });
|
|
|
|
console.log('\n✅ Development database reset successfully!');
|
|
console.log('\nNext steps:');
|
|
console.log('1. Seed the database (optional): npm run db:seed');
|
|
console.log('2. Start development server: npm run dev');
|
|
} catch (error) {
|
|
console.error('\n❌ Failed to reset database:', error.message);
|
|
process.exit(1);
|
|
}
|