feat: persist chat messages to SQLite

Chat messages were ephemeral — lost on page refresh or late join.
Add a chat_messages table and load the last 50 messages on connect
so players see conversation history.
This commit is contained in:
Ryan Hamamura
2026-02-13 11:57:22 -10:00
parent 08c20a1732
commit 02212ffd61
6 changed files with 150 additions and 4 deletions

11
main.go
View File

@@ -27,9 +27,10 @@ import (
)
var (
store = game.NewGameStore()
snakeStore = snake.NewSnakeStore()
queries *gen.Queries
store = game.NewGameStore()
snakeStore = snake.NewSnakeStore()
queries *gen.Queries
chatPersister *db.ChatPersister
)
//go:embed assets
@@ -61,6 +62,7 @@ func main() {
queries = gen.New(db.DB)
store.SetPersister(db.NewGamePersister(queries))
snakeStore.SetPersister(db.NewSnakePersister(queries))
chatPersister = db.NewChatPersister(queries)
sessionManager, err := via.NewSQLiteSessionManager(db.DB)
if err != nil {
@@ -356,7 +358,7 @@ func main() {
colSignal := c.Signal(0)
showGuestPrompt := c.Signal(false)
chatMsg := c.Signal("")
var chatMessages []ui.C4ChatMessage
chatMessages, _ := chatPersister.LoadChatMessages(gameID)
var chatMu sync.Mutex
goToLogin := c.Action(func() {
@@ -462,6 +464,7 @@ func main() {
Message: msg,
Time: time.Now().UnixMilli(),
}
chatPersister.SaveChatMessage(gameID, cm)
data, err := json.Marshal(cm)
if err != nil {
return