punimtag/viewer-frontend/scripts/run-migration.ts
Tanya de2144be2a feat: Add new scripts and update project structure for database management and user authentication
This commit introduces several new scripts for managing database operations, including user creation, permission grants, and data migrations. It also adds new documentation files to guide users through the setup and configuration processes. Additionally, the project structure is updated to enhance organization and maintainability, ensuring a smoother development experience for contributors. These changes support the ongoing transition to a web-based architecture and improve overall project functionality.
2026-01-06 13:53:24 -05:00

80 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { PrismaClient as PrismaClientAuth } from '../node_modules/.prisma/client-auth';
import * as dotenv from 'dotenv';
// Load environment variables
dotenv.config({ path: '.env' });
const prisma = new PrismaClientAuth({
datasourceUrl: process.env.DATABASE_URL_AUTH,
});
async function runMigration() {
try {
console.log('Running migration to add has_write_access column...\n');
// Check if column already exists
try {
await prisma.$queryRaw`SELECT has_write_access FROM users LIMIT 1`;
console.log('✅ Column has_write_access already exists');
return;
} catch (error: any) {
if (error.message?.includes('has_write_access') || error.code === '42703') {
console.log('Column does not exist, adding it...');
} else {
throw error;
}
}
// Add the column
console.log('Adding has_write_access column...');
await prisma.$executeRawUnsafe(`
ALTER TABLE users
ADD COLUMN IF NOT EXISTS has_write_access BOOLEAN NOT NULL DEFAULT false;
`);
console.log('✅ Column added');
// Create index
console.log('Creating index...');
await prisma.$executeRawUnsafe(`
CREATE INDEX IF NOT EXISTS idx_users_has_write_access ON users(has_write_access);
`);
console.log('✅ Index created');
// Update existing users to have write access = false (except we'll update admin separately)
console.log('Updating existing users...');
await prisma.$executeRawUnsafe(`
UPDATE users
SET has_write_access = false
WHERE has_write_access IS NULL;
`);
console.log('✅ Existing users updated');
// Verify
const result = await prisma.$queryRaw<Array<{column_name: string, data_type: string, column_default: string}>>`
SELECT column_name, data_type, column_default
FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'has_write_access';
`;
if (result.length > 0) {
console.log('\n✅ Migration completed successfully!');
console.log('Column details:', result[0]);
} else {
console.log('\n⚠ Column was added but verification query returned no results');
}
} catch (error: any) {
console.error('\n❌ Error running migration:', error.message);
if (error.message.includes('permission denied')) {
console.error('\n⚠ Permission denied. You may need to run this as a database superuser.');
console.error('Try running the SQL manually:');
console.error(' ALTER TABLE users ADD COLUMN IF NOT EXISTS has_write_access BOOLEAN NOT NULL DEFAULT false;');
}
throw error;
} finally {
await prisma.$disconnect();
}
}
runMigration();