#!/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 const envPath = path.resolve(__dirname, '..', '.env.development'); if (fs.existsSync(envPath)) { require('dotenv').config({ path: envPath }); } // Check if DATABASE_URL is set if (!process.env.DATABASE_URL) { console.error('āŒ DATABASE_URL is not set'); console.error('Please set it in .env.development'); process.exit(1); } // Extract database name from URL const dbUrl = process.env.DATABASE_URL; 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); }