Files
FarmaFinder/backend/migrate.js
2026-04-01 01:18:21 +02:00

128 lines
4.3 KiB
JavaScript
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.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import sqlite3 from 'sqlite3';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const dbPath = path.join(__dirname, 'database.sqlite');
const db = new sqlite3.Database(dbPath);
console.log('🔄 Starting database migration...');
// Promisify database operations
function dbRun(sql, params = []) {
return new Promise((resolve, reject) => {
db.run(sql, params, function(err) {
if (err) reject(err);
else resolve({ lastID: this.lastID, changes: this.changes });
});
});
}
function dbAll(sql, params = []) {
return new Promise((resolve, reject) => {
db.all(sql, params, (err, rows) => {
if (err) reject(err);
else resolve(rows);
});
});
}
async function migrate() {
try {
// Check if old medicines table exists
const tables = await dbAll(`
SELECT name FROM sqlite_master
WHERE type='table' AND name='medicines'
`);
if (tables.length > 0) {
console.log('📋 Found old medicines table');
// Check if we need to migrate pharmacy_medicines
const columns = await dbAll(`PRAGMA table_info(pharmacy_medicines)`);
const hasMedicineId = columns.some(col => col.name === 'medicine_id');
const hasNregistro = columns.some(col => col.name === 'medicine_nregistro');
if (hasMedicineId && !hasNregistro) {
console.log('🔄 Migrating pharmacy_medicines table...');
// Create new table with updated schema
await dbRun(`
CREATE TABLE pharmacy_medicines_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pharmacy_id INTEGER NOT NULL,
medicine_nregistro TEXT NOT NULL,
medicine_name TEXT,
price REAL,
stock INTEGER DEFAULT 0,
FOREIGN KEY (pharmacy_id) REFERENCES pharmacies(id),
UNIQUE(pharmacy_id, medicine_nregistro)
)
`);
console.log('✅ Created new pharmacy_medicines table');
// Copy data if any exists (though it will be invalid without nregistro)
const oldData = await dbAll('SELECT * FROM pharmacy_medicines');
console.log(`📦 Found ${oldData.length} old pharmacy-medicine relationships`);
if (oldData.length > 0) {
console.log('⚠️ Warning: Old medicine relationships will be lost.');
console.log(' You will need to re-link medicines using the CIMA database.');
}
// Drop old table
await dbRun('DROP TABLE pharmacy_medicines');
// Rename new table
await dbRun('ALTER TABLE pharmacy_medicines_new RENAME TO pharmacy_medicines');
console.log('✅ Migrated pharmacy_medicines table');
} else if (hasNregistro) {
console.log('✅ pharmacy_medicines table already migrated');
}
// We can keep the old medicines table for reference, or drop it
console.log(' Old medicines table can be kept for reference or deleted manually');
console.log(' To delete: sqlite3 database.sqlite "DROP TABLE IF EXISTS medicines;"');
} else {
console.log('✅ No old medicines table found - creating new schema');
// Create pharmacy_medicines table with new schema
await dbRun(`
CREATE TABLE IF NOT EXISTS pharmacy_medicines (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pharmacy_id INTEGER NOT NULL,
medicine_nregistro TEXT NOT NULL,
medicine_name TEXT,
price REAL,
stock INTEGER DEFAULT 0,
FOREIGN KEY (pharmacy_id) REFERENCES pharmacies(id),
UNIQUE(pharmacy_id, medicine_nregistro)
)
`);
console.log('✅ Created pharmacy_medicines table');
}
console.log('');
console.log('✨ Migration completed successfully!');
console.log('');
console.log('Next steps:');
console.log('1. Install Redis: brew install redis (macOS) or apt-get install redis-server (Linux)');
console.log('2. Start Redis: redis-server');
console.log('3. Install dependencies: npm install');
console.log('4. Start the server: npm start');
} catch (error) {
console.error('❌ Migration failed:', error);
process.exit(1);
} finally {
db.close();
}
}
migrate();