mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-12 01:39:47 +02:00
Correction de TOUTES les requêtes SQL pour PostgreSQL: 1. Paramètres: ? → $1, $2, $3... - 234 conversions automatiques - auth.routes.js: WHERE username = $1 - Tous les routes et services corrigés 2. Booléens: 0/1 → TRUE/FALSE - WHERE enabled = 1 → WHERE enabled = TRUE - WHERE completed = 0 → WHERE completed = FALSE - rss-scheduler.js ligne 154: corrigé ERREURS RÉSOLUES: - ✅ "syntax error at end of input" (auth login) - ✅ "operator does not exist: boolean = integer" (RSS) Script: scripts/convert-sql-to-postgres.js - Conversion automatique intelligente - Gère WHERE, INSERT, UPDATE, DELETE, SELECT - Remplace ? par $N selon ordre - Convertit booléens 0/1 → TRUE/FALSE Fichiers modifiés: - routes/*.js (9 fichiers) - services/*.js (2 fichiers) - 234 requêtes SQL corrigées La connexion et les flux RSS devraient maintenant fonctionner.
102 lines
3.2 KiB
JavaScript
Executable File
102 lines
3.2 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
// Script de conversion SQLite → PostgreSQL pour les requêtes SQL
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
console.log('🔄 Conversion des requêtes SQLite → PostgreSQL\n');
|
|
|
|
// Fichiers à convertir
|
|
const files = [
|
|
'routes/auth.routes.js',
|
|
'routes/calendar.routes.js',
|
|
'routes/notes.routes.js',
|
|
'routes/openrouter.routes.js',
|
|
'routes/rss.routes.js',
|
|
'routes/rss.routes-v2.js',
|
|
'routes/settings.routes.js',
|
|
'routes/todos.routes.js',
|
|
'routes/users.routes.js',
|
|
'services/rss-scheduler.js',
|
|
'services/rss-scheduler-v2.js'
|
|
];
|
|
|
|
let totalChanges = 0;
|
|
|
|
files.forEach(file => {
|
|
const filePath = path.join(__dirname, '..', file);
|
|
|
|
if (!fs.existsSync(filePath)) {
|
|
console.log(`⏭️ ${file} n'existe pas, skip`);
|
|
return;
|
|
}
|
|
|
|
let content = fs.readFileSync(filePath, 'utf8');
|
|
let changes = 0;
|
|
|
|
// 1. Convertir les paramètres ? vers $1, $2, $3...
|
|
// Chercher toutes les requêtes SQL entre quotes
|
|
content = content.replace(/(["'`])([^"'`]*?\bWHERE\b[^"'`]*?)(\1)/gi, (match, quote, sql, endQuote) => {
|
|
let newSql = sql;
|
|
let paramCount = 0;
|
|
|
|
// Remplacer chaque ? par $N
|
|
newSql = newSql.replace(/\?/g, () => {
|
|
paramCount++;
|
|
return `$${paramCount}`;
|
|
});
|
|
|
|
if (paramCount > 0) {
|
|
changes += paramCount;
|
|
}
|
|
|
|
return quote + newSql + endQuote;
|
|
});
|
|
|
|
// Gérer aussi les requêtes INSERT, UPDATE, DELETE
|
|
content = content.replace(/(["'`])([^"'`]*?\b(?:INSERT|UPDATE|DELETE|SELECT)\b[^"'`]*?)(\1)/gi, (match, quote, sql, endQuote) => {
|
|
if (sql.includes('$')) return match; // Déjà converti
|
|
|
|
let newSql = sql;
|
|
let paramCount = 0;
|
|
|
|
// Remplacer chaque ? par $N
|
|
newSql = newSql.replace(/\?/g, () => {
|
|
paramCount++;
|
|
return `$${paramCount}`;
|
|
});
|
|
|
|
if (paramCount > 0) {
|
|
changes += paramCount;
|
|
}
|
|
|
|
return quote + newSql + endQuote;
|
|
});
|
|
|
|
// 2. Convertir les booléens 0/1 vers TRUE/FALSE
|
|
// enabled = 1 → enabled = TRUE
|
|
content = content.replace(/\bWHERE\s+(\w+)\s*=\s*1\b/gi, 'WHERE $1 = TRUE');
|
|
content = content.replace(/\bWHERE\s+(\w+)\s*=\s*0\b/gi, 'WHERE $1 = FALSE');
|
|
content = content.replace(/\bAND\s+(\w+)\s*=\s*1\b/gi, 'AND $1 = TRUE');
|
|
content = content.replace(/\bAND\s+(\w+)\s*=\s*0\b/gi, 'AND $1 = FALSE');
|
|
content = content.replace(/\bOR\s+(\w+)\s*=\s*1\b/gi, 'OR $1 = TRUE');
|
|
content = content.replace(/\bOR\s+(\w+)\s*=\s*0\b/gi, 'OR $1 = FALSE');
|
|
|
|
// 3. Convertir DEFAULT dans les INSERT
|
|
content = content.replace(/,\s*0\s*\)/g, ', FALSE)'); // Avant la fin de VALUES
|
|
content = content.replace(/,\s*1\s*\)/g, ', TRUE)');
|
|
content = content.replace(/VALUES\s*\(\s*1\s*,/gi, 'VALUES (TRUE,');
|
|
content = content.replace(/VALUES\s*\(\s*0\s*,/gi, 'VALUES (FALSE,');
|
|
|
|
if (changes > 0) {
|
|
fs.writeFileSync(filePath, content, 'utf8');
|
|
console.log(`✅ ${file}: ${changes} changements`);
|
|
totalChanges += changes;
|
|
} else {
|
|
console.log(`⚪ ${file}: aucun changement`);
|
|
}
|
|
});
|
|
|
|
console.log(`\n✅ Total: ${totalChanges} conversions effectuées`);
|
|
console.log('\n📝 Vérifiez manuellement si nécessaire et testez!');
|