diff --git a/deploy-staging.sh b/deploy-staging.sh new file mode 100755 index 0000000..5e8b76d --- /dev/null +++ b/deploy-staging.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -e + +cd "$(dirname "$0")" + +echo "Pulling latest changes..." +git pull + +echo "Installing dependencies..." +bun i + +echo "Pushing database changes..." +bun run db:generate +bun run db:migrate + +echo "Building..." +bun --bun run build + +echo "Restarting service..." +sudo systemctl restart bibdle-test + +echo "Done!" diff --git a/scripts/dedup-completions.ts b/scripts/dedup-completions.ts new file mode 100644 index 0000000..6ef9966 --- /dev/null +++ b/scripts/dedup-completions.ts @@ -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(); diff --git a/src/lib/components/GuessesTable.svelte b/src/lib/components/GuessesTable.svelte index 0f2974f..a5103e1 100644 --- a/src/lib/components/GuessesTable.svelte +++ b/src/lib/components/GuessesTable.svelte @@ -1,20 +1,8 @@