Files
root da64562eb4 Initial commit: Padel Planner API
- Express API server met SQLite
- Database migratie (migrate.cjs)
- REST endpoints voor players, matches, scores
- CHANGELOG.md en .gitignore
2026-05-24 20:25:54 +00:00

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}`);