Files
cannaiq/backend/migrate-proxy-locations.ts
2025-11-28 19:45:44 -07:00

84 lines
2.3 KiB
TypeScript

import { Pool } from 'pg';
async function migrateProxyLocations() {
const sailPool = new Pool({
connectionString: 'postgresql://sail:password@localhost:5432/dutchie_menus'
});
const dutchiePool = new Pool({
connectionString: 'postgresql://dutchie:dutchie_local_pass@localhost:54320/dutchie_menus'
});
try {
console.log('🔄 Migrating proxy location data from SAIL → DUTCHIE\n');
// Get all proxies with location data from SAIL
const result = await sailPool.query(`
SELECT host, port, city, state, country, country_code, active
FROM proxies
WHERE city IS NOT NULL
ORDER BY host, port
`);
console.log(`📋 Found ${result.rows.length} proxies with location data in SAIL\n`);
let updated = 0;
let notFound = 0;
for (const proxy of result.rows) {
// Update matching proxy in DUTCHIE database
const updateResult = await dutchiePool.query(`
UPDATE proxies
SET
city = $1,
state = $2,
country = $3,
country_code = $4,
active = $5
WHERE host = $6 AND port = $7
RETURNING id
`, [
proxy.city,
proxy.state,
proxy.country,
proxy.country_code,
proxy.active,
proxy.host,
proxy.port
]);
if (updateResult.rowCount > 0) {
updated++;
if (updated % 100 === 0) {
console.log(` ✅ Updated ${updated}/${result.rows.length}...`);
}
} else {
notFound++;
console.log(` ⚠️ Proxy not found in DUTCHIE: ${proxy.host}:${proxy.port}`);
}
}
console.log(`\n📊 Results:`);
console.log(` ✅ Updated: ${updated}`);
console.log(` ⚠️ Not found: ${notFound}`);
// Verify final counts
const dutchieCheck = await dutchiePool.query(`
SELECT
COUNT(*) as total,
COUNT(*) FILTER (WHERE city IS NOT NULL) as with_location
FROM proxies
`);
console.log(`\n✅ DUTCHIE database now has:`);
console.log(` Total proxies: ${dutchieCheck.rows[0].total}`);
console.log(` With location data: ${dutchieCheck.rows[0].with_location}`);
} finally {
await sailPool.end();
await dutchiePool.end();
}
}
migrateProxyLocations().catch(console.error);