Files
euchre_camp/scripts/switch-database.js
T

109 lines
3.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Script to switch between SQLite and PostgreSQL databases
* Usage: node scripts/switch-database.js [sqlite|postgres]
*/
const fs = require('fs');
const path = require('path');
const envFile = '.env';
const envExampleFile = '.env.example';
function updateEnvFile(provider) {
const envPath = path.join(process.cwd(), envFile);
// Read current .env file or create from example
let envContent = '';
if (fs.existsSync(envPath)) {
envContent = fs.readFileSync(envPath, 'utf8');
} else if (fs.existsSync(envExampleFile)) {
envContent = fs.readFileSync(envExampleFile, 'utf8');
}
// Update DATABASE_PROVIDER (note: this is for reference only, not used by Prisma)
const providerRegex = /^DATABASE_PROVIDER=.*$/m;
if (providerRegex.test(envContent)) {
envContent = envContent.replace(providerRegex, `DATABASE_PROVIDER=${provider}`);
} else {
envContent += `\nDATABASE_PROVIDER=${provider}\n`;
}
// Update DATABASE_URL based on provider
if (provider === 'sqlite') {
const sqliteUrl = 'DATABASE_URL="file:./prisma/dev.db"';
const urlRegex = /^DATABASE_URL=.*$/m;
if (urlRegex.test(envContent)) {
envContent = envContent.replace(urlRegex, sqliteUrl);
} else {
envContent += `${sqliteUrl}\n`;
}
} else if (provider === 'postgresql') {
const pgUrl = 'DATABASE_URL="postgresql://username:password@localhost:5432/euchre_camp"';
const urlRegex = /^DATABASE_URL=.*$/m;
if (urlRegex.test(envContent)) {
envContent = envContent.replace(urlRegex, pgUrl);
} else {
envContent += `${pgUrl}\n`;
}
}
// Write updated content
fs.writeFileSync(envPath, envContent);
console.log(`✅ Updated ${envFile} to use ${provider} database`);
}
function updateSchemaFile(provider) {
const schemaPath = path.join(process.cwd(), 'prisma', 'schema.prisma');
if (!fs.existsSync(schemaPath)) {
console.error(`❌ Schema file not found: ${schemaPath}`);
return false;
}
let schemaContent = fs.readFileSync(schemaPath, 'utf8');
// Update the provider in the datasource block
const providerRegex = /(datasource db\s*\{[^}]*provider\s*=\s*)"[^"]+"/;
if (providerRegex.test(schemaContent)) {
schemaContent = schemaContent.replace(
providerRegex,
`$1"${provider}"`
);
fs.writeFileSync(schemaPath, schemaContent);
console.log(`✅ Updated schema.prisma to use ${provider} provider`);
return true;
} else {
console.error(`❌ Could not find provider declaration in schema.prisma`);
return false;
}
}
function main() {
const args = process.argv.slice(2);
const provider = args[0];
if (!provider) {
console.error('❌ Usage: node scripts/switch-database.js [sqlite|postgres]');
process.exit(1);
}
if (!['sqlite', 'postgres', 'postgresql'].includes(provider)) {
console.error(`❌ Invalid provider: ${provider}. Must be 'sqlite' or 'postgres'`);
process.exit(1);
}
const normalizedProvider = provider === 'postgres' ? 'postgresql' : provider;
updateEnvFile(normalizedProvider);
updateSchemaFile(normalizedProvider);
console.log('\nNext steps:');
console.log('1. Run: npx prisma generate');
console.log('2. Run: npx prisma migrate deploy');
console.log('3. Restart your development server');
}
main();