refactor: integrate chat persistence into Room
All checks were successful
CI / Deploy / test (pull_request) Successful in 14s
CI / Deploy / lint (pull_request) Successful in 25s
CI / Deploy / deploy (pull_request) Has been skipped

Move SaveMessage/LoadMessages logic into Room as private methods.
NewPersistentRoom auto-loads history and auto-saves on Send, removing
the need for handlers to coordinate persistence separately.
This commit is contained in:
Ryan Hamamura
2026-03-02 21:25:03 -10:00
parent 6d43bdea16
commit 2cfd42b606
4 changed files with 71 additions and 61 deletions

View File

@@ -85,9 +85,9 @@ func HandleGamePage(store *connect4.Store, sm *scs.SessionManager, queries *repo
}
g := gi.GetGame()
msgs := chat.LoadMessages(queries, gameID)
room := chat.NewPersistentRoom(nil, "", queries, gameID)
if err := pages.GamePage(g, myColor, msgs, c4ChatConfig(gameID)).Render(r.Context(), w); err != nil {
if err := pages.GamePage(g, myColor, room.Messages(), c4ChatConfig(gameID)).Render(r.Context(), w); err != nil {
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
}
}
@@ -111,7 +111,7 @@ func HandleGameEvents(store *connect4.Store, nc *nats.Conn, sm *scs.SessionManag
))
chatCfg := c4ChatConfig(gameID)
room := chat.NewRoom(nc, "connect4.chat."+gameID, chat.LoadMessages(queries, gameID))
room := chat.NewPersistentRoom(nc, "connect4.chat."+gameID, queries, gameID)
// Send initial render
sendGameComponents(sse, gi, myColor, room, chatCfg)
@@ -228,9 +228,7 @@ func HandleSendChat(store *connect4.Store, nc *nats.Conn, sm *scs.SessionManager
Message: signals.ChatMsg,
Time: time.Now().UnixMilli(),
}
chat.SaveMessage(queries, gameID, msg)
room := chat.NewRoom(nc, "connect4.chat."+gameID, nil)
room := chat.NewPersistentRoom(nc, "connect4.chat."+gameID, queries, gameID)
room.Send(msg)
sse := datastar.NewSSE(w, r)

View File

@@ -126,7 +126,7 @@ func HandleSnakeEvents(snakeStore *snake.SnakeStore, nc *nats.Conn, sm *scs.Sess
var room *chat.Room
if sg.Mode == snake.ModeMultiplayer {
room = chat.NewRoom(nc, "snake.chat."+gameID, nil)
room = chat.NewRoom(nc, "snake.chat."+gameID)
chatCh, chatSub, err = room.Subscribe()
if err != nil {
return
@@ -247,7 +247,7 @@ func HandleSendChat(snakeStore *snake.SnakeStore, nc *nats.Conn, sm *scs.Session
Message: signals.ChatMsg,
}
room := chat.NewRoom(nc, "snake.chat."+gameID, nil)
room := chat.NewRoom(nc, "snake.chat."+gameID)
room.Send(msg)
sse := datastar.NewSSE(w, r)