const Database = require('better-sqlite3'); const path = require('path'); const oldDb = new Database(path.join(__dirname, '../../antragsideen.db'), { readonly: true }); const newDb = new Database(path.join(__dirname, 'antragsideen.db')); // Ausschuss-Normalisierung const ausschussMap = { 'Umweltausschuss': 1, 'Infrastrukturausschuss': 2, 'Infrastruktur': 2, 'HFA': 3, 'Hauptausschuss': 3, 'Haupt- und Finanzausschuss': 3, 'Stadtentwicklungsausschuss': 4, 'Stadtentwicklung': 4, 'Sozialausschuss': 5, 'Soziales': 5, 'Wirtschaftsausschuss': 6, 'Wirtschaft': 6, 'Sport- und Freizeitausschuss': 7, 'Sport': 7, 'Schulausschuss': 8, 'Ausschuss für Bürgerbeteiligung': 9, 'Bürgerbeteiligung': 9 }; // Personen-Map const personenMap = { 'Rüdiger Ludwig': 1, 'Heike Heuer': 2, 'Jörg Fritzsche': 3, 'Karin Köppen': 4, 'Daniel Adam': 5, 'Nicole Pfefferer': 6 }; // Priorität-Map const prioMap = { 'Hoch': 1, 'Mittel': 2, 'Niedrig': 3, 'Abgeschlossen': 4 }; // Status-Map const statusMap = { 'Ideenspeicher': 1, 'Recherche': 2, 'Entwurf': 3, 'Eingereicht': 4, 'Beschlossen': 5, 'Abgelehnt': 6, 'Abgeschlossen': 7 }; // Bereich-Map const bereichMap = { 'Umwelt': 1, 'Infra': 2, 'HFA': 3, 'Soziales': 4, 'Stadt': 5, 'Wirtschaft': 6 }; // Anträge migrieren const antraege = oldDb.prepare('SELECT * FROM antraege').all(); const insertAntrag = newDb.prepare(` INSERT INTO antraege (id, titel, kurzbeschreibung, prioritaet_id, status_id, bereich_id, dossier, antragstext, notizen, allris_referenzen, erstellt_am, aktualisiert_am) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const insertAntragAusschuss = newDb.prepare(` INSERT OR IGNORE INTO antrag_ausschuesse (antrag_id, ausschuss_id) VALUES (?, ?) `); const insertAntragPerson = newDb.prepare(` INSERT OR IGNORE INTO antrag_personen (antrag_id, person_id) VALUES (?, ?) `); newDb.exec('BEGIN TRANSACTION'); for (const a of antraege) { // Antrag einfügen insertAntrag.run( a.id, a.titel, a.kurzbeschreibung, prioMap[a.prioritaet] || 2, statusMap[a.status] || 1, bereichMap[a.bereich] || 1, a.dossier, a.antragstext, a.notizen, a.allris_referenzen, a.erstellt_am, a.aktualisiert_am ); // Ausschüsse verknüpfen if (a.ausschuesse) { try { const ausschuesse = JSON.parse(a.ausschuesse); for (const aus of ausschuesse) { const ausId = ausschussMap[aus]; if (ausId) insertAntragAusschuss.run(a.id, ausId); } } catch (e) {} } // Personen verknüpfen if (a.personen) { try { const personen = JSON.parse(a.personen); for (const pers of personen) { const persId = personenMap[pers]; if (persId) insertAntragPerson.run(a.id, persId); } } catch (e) {} } } newDb.exec('COMMIT'); console.log(`✓ ${antraege.length} Anträge migriert`); // Statistik const stats = newDb.prepare(` SELECT (SELECT COUNT(*) FROM antraege) as antraege, (SELECT COUNT(*) FROM antrag_ausschuesse) as ausschuss_links, (SELECT COUNT(*) FROM antrag_personen) as personen_links `).get(); console.log(`✓ ${stats.ausschuss_links} Ausschuss-Verknüpfungen`); console.log(`✓ ${stats.personen_links} Personen-Verknüpfungen`); oldDb.close(); newDb.close();