feat: salva partite su SQLite e aggiunge storico in dev
- Aggiunge src/db.js con better-sqlite3: tabella partite con nomi, modalità, set, formazione di partenza per set, punteggi e vincitore - Salvataggio automatico al termine della partita (websocket-handler.js) - Aggiunge formInizioSet in gameState per tracciare la formazione iniziale di ogni set - Aggiunge storico.html: pagina vanilla dark-theme con lista partite espandibili (set, punteggio, formazioni) - Aggiunge server storico su porta 3002 in dev (vite-plugin-websocket.js) - Aggiunge endpoint /api/partite su displayApp (server.js) - Migliora banner di avvio con URL storico locale e da rete - Migliora log WebSocket: connessione aperta, ruolo unregistered, client rimanenti - Aggiorna .gitignore: ignora tutta la cartella data/
This commit is contained in:
62
src/db.js
Normal file
62
src/db.js
Normal file
@@ -0,0 +1,62 @@
|
||||
import Database from 'better-sqlite3'
|
||||
import { mkdirSync } from 'fs'
|
||||
import { join, dirname } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||
const DATA_DIR = join(__dirname, '..', 'data')
|
||||
const DB_PATH = process.env.DB_PATH || join(DATA_DIR, 'partite.db')
|
||||
|
||||
mkdirSync(DATA_DIR, { recursive: true })
|
||||
|
||||
const db = new Database(DB_PATH)
|
||||
db.pragma('journal_mode = WAL')
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS partite (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
data TEXT NOT NULL,
|
||||
modalita TEXT NOT NULL,
|
||||
nome_home TEXT NOT NULL,
|
||||
nome_guest TEXT NOT NULL,
|
||||
set_home INTEGER NOT NULL,
|
||||
set_guest INTEGER NOT NULL,
|
||||
vincitore TEXT,
|
||||
json TEXT NOT NULL
|
||||
)
|
||||
`)
|
||||
|
||||
const stmtInsert = db.prepare(`
|
||||
INSERT INTO partite (data, modalita, nome_home, nome_guest, set_home, set_guest, vincitore, json)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`)
|
||||
|
||||
export function salvaPartita(state) {
|
||||
const payload = {
|
||||
data: new Date().toISOString(),
|
||||
modalita: state.modalitaPartita,
|
||||
nomi: state.sp.nomi,
|
||||
set: state.sp.set,
|
||||
vincitore: state.sp.partitaFinita?.vincitore ?? null,
|
||||
strisce: state.sp.strisce,
|
||||
}
|
||||
const { lastInsertRowid } = stmtInsert.run(
|
||||
payload.data,
|
||||
payload.modalita,
|
||||
payload.nomi.home,
|
||||
payload.nomi.guest,
|
||||
payload.set.home,
|
||||
payload.set.guest,
|
||||
payload.vincitore,
|
||||
JSON.stringify(payload)
|
||||
)
|
||||
return lastInsertRowid
|
||||
}
|
||||
|
||||
export function getPartite() {
|
||||
return db.prepare('SELECT * FROM partite ORDER BY id DESC').all()
|
||||
}
|
||||
|
||||
export function getPartita(id) {
|
||||
return db.prepare('SELECT * FROM partite WHERE id = ?').get(id)
|
||||
}
|
||||
Reference in New Issue
Block a user