From 6ddee564ca6184cd6840001a7719c5347516aca1 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Mon, 13 Oct 2025 01:12:00 +0500 Subject: fix: panic on concurrent db write --- internal/handlers.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/internal/handlers.go b/internal/handlers.go index 9c0ade4..657b370 100644 --- a/internal/handlers.go +++ b/internal/handlers.go @@ -100,11 +100,18 @@ func HandleMessageEvent(channel string, user twitch.User, message twitch.Message log.Panicf("Error getting channel word: %v\n", err) } - usageCount++ - _, err = db.Exec("UPDATE channel_words SET last_used_at = UTC_TIMESTAMP, usage_count = ? WHERE id = ?", usageCount, cwordId) - + _, err := db.Exec( + `INSERT INTO channel_words(word_id, user_id, channel_id) + VALUES (?, ?, ?) + ON DUPLICATE KEY UPDATE + usage_count = usage_count + 1, + last_used_at = UTC_TIMESTAMP()`, + wordId, + userId, + channelId, + ) if err != nil { - log.Panicf("Failed to update channel word: %v\n", err) + log.Panicf("Error creating a new channel word: %vn", err) } } } -- cgit v1.2.3