From 1c34b07eb0cdc43d42bc57e1f8dac1bea4e2ac8f Mon Sep 17 00:00:00 2001 From: Dicken Date: Mon, 29 Jun 2026 12:34:00 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Hex=20Wars=20-=20Resign=20setzt=20move?= =?UTF-8?q?=5Fcount>=3D2,=20Badge=20+=20Liste=20f=C3=BCr=20Gewinner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/tools/gebietseroberung/routes.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/src/tools/gebietseroberung/routes.js b/backend/src/tools/gebietseroberung/routes.js index 26f047d..5640438 100644 --- a/backend/src/tools/gebietseroberung/routes.js +++ b/backend/src/tools/gebietseroberung/routes.js @@ -588,8 +588,15 @@ router.post('/:id/resign', authenticate, (req, res) => { if (game.owner_id !== me && game.opponent_id !== me) return res.status(403).json({ error: 'Kein Zugriff' }); if (game.status !== 'active') return res.status(400).json({ error: 'Spiel bereits beendet' }); - const winner = game.owner_id === me ? game.opponent_id : game.owner_id; - db.prepare(`UPDATE geo_games SET status='finished', winner_id=?, updated_at=datetime('now','localtime') WHERE id=?`).run(winner, game.id); + const winner = game.owner_id === me ? game.opponent_id : game.owner_id; + // move_count auf min. 2 setzen damit Spiel in Liste + Leaderboard erscheint + // seen_by: aufgebender Spieler hat es gesehen, Gewinner noch nicht + const newMoveCount = Math.max(game.move_count || 0, 2); + const seenBy = JSON.stringify([me]); // nur der Aufgebende hat es "gesehen" + db.prepare(` + UPDATE geo_games SET status='finished', winner_id=?, move_count=?, seen_by=?, + updated_at=datetime('now','localtime') WHERE id=? + `).run(winner, newMoveCount, seenBy, game.id); const myName = db.prepare('SELECT username FROM users WHERE id=?').get(me)?.username || 'Jemand'; sendPush(winner, '⬡ Hex Wars gewonnen!', `${myName} hat aufgegeben. Du gewinnst! 🎉`); res.json({ ok: true });