mirror of
https://github.com/pupperpowell/bibdle.git
synced 2026-04-05 17:33:31 -04:00
Refactor game logic into utility modules and add cross-device sync
Extracted game state management, share logic, and stats API calls into dedicated modules (game-persistence.svelte.ts, share.ts, stats-client.ts), and moved daily verse loading to client-side to fix timezone issues. Added a guesses column to daily_completions for cross-device state restoration for logged-in users, a new GET /api/stats endpoint, and a staging deploy script. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
41
scripts/dedup-completions.ts
Normal file
41
scripts/dedup-completions.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { Database } from 'bun:sqlite';
|
||||
import path from 'path';
|
||||
|
||||
const dbUrl = process.env.DATABASE_URL;
|
||||
if (!dbUrl) throw new Error('DATABASE_URL is not set');
|
||||
|
||||
const dbPath = dbUrl.startsWith('file:') ? dbUrl.slice(5) : dbUrl;
|
||||
const db = new Database(path.resolve(dbPath));
|
||||
|
||||
const duplicates = db.query(`
|
||||
SELECT anonymous_id, date, COUNT(*) as count
|
||||
FROM daily_completions
|
||||
GROUP BY anonymous_id, date
|
||||
HAVING count > 1
|
||||
`).all() as { anonymous_id: string; date: string; count: number }[];
|
||||
|
||||
if (duplicates.length === 0) {
|
||||
console.log('No duplicates found.');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
console.log(`Found ${duplicates.length} duplicate group(s):`);
|
||||
|
||||
const deleteStmt = db.query(`
|
||||
DELETE FROM daily_completions
|
||||
WHERE anonymous_id = $anonymous_id AND date = $date
|
||||
AND id NOT IN (
|
||||
SELECT id FROM daily_completions
|
||||
WHERE anonymous_id = $anonymous_id AND date = $date
|
||||
ORDER BY completed_at ASC
|
||||
LIMIT 1
|
||||
)
|
||||
`);
|
||||
|
||||
for (const { anonymous_id, date, count } of duplicates) {
|
||||
deleteStmt.run({ $anonymous_id: anonymous_id, $date: date });
|
||||
console.log(` ${anonymous_id} / ${date}: kept earliest, deleted ${count - 1} row(s) (had ${count})`);
|
||||
}
|
||||
|
||||
console.log('Done.');
|
||||
db.close();
|
||||
Reference in New Issue
Block a user