From 4b9e7ac9ec496a2175049e6b69d6423e18b030d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=B6rdle=20Bot?= Date: Sun, 23 Nov 2025 00:12:04 +0100 Subject: [PATCH] fix(logic): use sequential puzzle number instead of database ID --- components/Game.tsx | 7 ++++--- lib/dailyPuzzle.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/components/Game.tsx b/components/Game.tsx index cdfe87c..3bac190 100644 --- a/components/Game.tsx +++ b/components/Game.tsx @@ -10,6 +10,7 @@ import { sendGotifyNotification } from '../app/actions'; interface GameProps { dailyPuzzle: { id: number; + puzzleNumber: number; audioUrl: string; songId: number; title: string; @@ -141,7 +142,7 @@ export default function Game({ dailyPuzzle, genre = null, isSpecial = false, max } } - const text = `Hördle #${dailyPuzzle.id}\n${genreText}\n${speaker}${emojiGrid}\n\n#Hördle #Music\n\n${shareUrl}`; + const text = `Hördle #${dailyPuzzle.puzzleNumber}\n${genreText}\n${speaker}${emojiGrid}\n\n#Hördle #Music\n\n${shareUrl}`; // Try native Web Share API only on mobile devices const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); @@ -149,7 +150,7 @@ export default function Game({ dailyPuzzle, genre = null, isSpecial = false, max if (isMobile && navigator.share) { try { await navigator.share({ - title: `Hördle #${dailyPuzzle.id}`, + title: `Hördle #${dailyPuzzle.puzzleNumber}`, text: text, }); setShareText('✓ Shared!'); @@ -178,7 +179,7 @@ export default function Game({ dailyPuzzle, genre = null, isSpecial = false, max return (
-

Hördle #{dailyPuzzle.id}{genre ? ` / ${genre}` : ''}

+

Hördle #{dailyPuzzle.puzzleNumber}{genre ? ` / ${genre}` : ''}

Next puzzle in: {timeUntilNext}
diff --git a/lib/dailyPuzzle.ts b/lib/dailyPuzzle.ts index 15a421c..da46eab 100644 --- a/lib/dailyPuzzle.ts +++ b/lib/dailyPuzzle.ts @@ -96,8 +96,23 @@ export async function getOrCreateDailyPuzzle(genreName: string | null = null) { if (!dailyPuzzle) return null; + // Calculate puzzle number (sequential day count) + const whereClause = genreId + ? { genreId: genreId } + : { genreId: null, specialId: null }; + + const puzzleCount = await prisma.dailyPuzzle.count({ + where: { + ...whereClause, + date: { + lte: dailyPuzzle.date + } + } + }); + return { id: dailyPuzzle.id, + puzzleNumber: puzzleCount, audioUrl: `/api/audio/${dailyPuzzle.song.filename}`, songId: dailyPuzzle.songId, title: dailyPuzzle.song.title, @@ -183,8 +198,19 @@ export async function getOrCreateSpecialPuzzle(specialName: string) { if (!dailyPuzzle) return null; + // Calculate puzzle number + const puzzleCount = await prisma.dailyPuzzle.count({ + where: { + specialId: special.id, + date: { + lte: dailyPuzzle.date + } + } + }); + return { id: dailyPuzzle.id, + puzzleNumber: puzzleCount, audioUrl: `/api/audio/${dailyPuzzle.song.filename}`, songId: dailyPuzzle.songId, title: dailyPuzzle.song.title,