// migrate.js — Migreer data.json naar SQLite const path = require('path'); const fs = require('fs'); // Laad de db.js module — we moeten even opletten dat we in de juiste dir staan process.env.DB_PATH = '/data/data.db'; // We importeren db.js met require, maar omdat we het nog niet in de container hebben // zetten we de module in de juiste dir console.log('šŸ“¦ Data migratie: JSON → SQLite'); console.log('────────────────────────────────\n'); const DATA_PATH = process.env.DATA_PATH || '/data/data.json'; if (!fs.existsSync(DATA_PATH)) { console.log('āŒ Geen data.json gevonden op', DATA_PATH); process.exit(1); } const data = JSON.parse(fs.readFileSync(DATA_PATH, 'utf-8')); console.log(`šŸ“– Ingelezen: ${data.players ? data.players.length : 0} spelers, ${data.matches ? data.matches.length : 0} matches, ${data.settings ? Object.keys(data.settings).length : 0} settings`); // Laad db.js — gebruik een relatief pad zodat we ook via node /app/api/migrate.js kunnen draaien const db = require('./db.cjs'); // ─── Players migreren ─── if (Array.isArray(data.players)) { console.log(`\nšŸ‘„ Spelers (${data.players.length}):`); for (const p of data.players) { try { const existing = db.getPlayerByTelegram(p.telegram_id); if (existing) { console.log(` ā­ļø ${p.name} — bestaat al (telegram_id ${p.telegram_id})`); continue; } db.addPlayer(p); console.log(` āœ… ${p.name} — level ${p.level}, ${p.position} (PIN: ${p.pin})`); } catch (e) { console.log(` āŒ ${p.name} — FOUT: ${e.message}`); } } } // ─── Matches migreren ─── if (Array.isArray(data.matches)) { console.log(`\nšŸŽ¾ Matches (${data.matches.length}):`); for (const m of data.matches) { try { // Check of match al bestaat const existing = db.getMatch(m.id); if (existing) { console.log(` ā­ļø Match ${m.id} — bestaat al`); continue; } db.addMatch(m); console.log(` āœ… Match ${m.id} — status: ${m.status}, spelers: ${Array.isArray(m.players) ? m.players.length : 0}`); } catch (e) { console.log(` āŒ Match ${m.id} — FOUT: ${e.message}`); } } } // ─── Settings migreren ─── if (data.settings && typeof data.settings === 'object') { console.log(`\nāš™ļø Settings (${Object.keys(data.settings).length}):`); for (const [key, value] of Object.entries(data.settings)) { db.setSetting(key, value); console.log(` āœ… ${key} = ${value}`); } } // ─── Sessions migreren ─── if (Array.isArray(data.sessions)) { console.log(`\nšŸ”‘ Sessions (${data.sessions.length}):`); for (const s of data.sessions) { try { db.setSession(s.id, s.player_id || s.playerId, s.data || {}); console.log(` āœ… Session ${s.id}`); } catch (e) { console.log(` āŒ Session ${s.id} — FOUT: ${e.message}`); } } } // ─── Verificatie ─── console.log('\nšŸ“Š Verificatie:'); const players = db.getPlayers(); const matches = db.getMatches(); console.log(` šŸ‘„ Spelers in DB: ${players.length}`); console.log(` šŸŽ¾ Matches in DB: ${matches.length}`); console.log(` āš™ļø Settings in DB:`, JSON.stringify(db.getSettings())); // Toon spelers for (const p of players) { const days = p.availability && !p.availability.isSet ? Object.keys(p.availability).filter(k => k !== 'isSet' && k !== 'days').length : 0; console.log(` šŸ“ ${p.name}: level ${p.level}, ${days} beschikbare dagen`); } console.log('\nāœ… Migratie voltooid!'); console.log(`šŸ“ data.json: ${DATA_PATH}`); console.log(`šŸ—„ļø SQLite: ${process.env.DB_PATH}`);