da64562eb4
- Express API server met SQLite - Database migratie (migrate.cjs) - REST endpoints voor players, matches, scores - CHANGELOG.md en .gitignore
104 lines
3.7 KiB
JavaScript
104 lines
3.7 KiB
JavaScript
// 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}`);
|