refactor: deduplicate persistence, add upsert queries, throttle snake saves
- Replace Create+Get+Update with UpsertGame/UpsertSnakeGame queries - Extract free functions (saveGame, loadGame, etc.) from duplicated receiver methods on Store and Instance types - Remove duplicate generateID from snake package, reuse game.GenerateID - Throttle snake game DB writes to every 2s instead of every tick - Fix double-lock in c4game chat handler - Update all code for sqlc pointer types (*string instead of sql.NullString)
This commit is contained in:
@@ -49,7 +49,7 @@ func (gs *GameStore) Create() *GameInstance {
|
||||
gs.gamesMu.Unlock()
|
||||
|
||||
if gs.queries != nil {
|
||||
gs.saveGame(gi.game) //nolint:errcheck
|
||||
saveGame(gs.queries, gi.game) //nolint:errcheck
|
||||
}
|
||||
|
||||
return gi
|
||||
@@ -68,12 +68,12 @@ func (gs *GameStore) Get(id string) (*GameInstance, bool) {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
g, err := gs.loadGame(id)
|
||||
g, err := loadGame(gs.queries, id)
|
||||
if err != nil || g == nil {
|
||||
return nil, false
|
||||
}
|
||||
|
||||
players, _ := gs.loadGamePlayers(id)
|
||||
players, _ := loadGamePlayers(gs.queries, id)
|
||||
for _, p := range players {
|
||||
switch p.Color {
|
||||
case 1:
|
||||
@@ -152,8 +152,8 @@ func (gi *GameInstance) Join(ps *PlayerSession) bool {
|
||||
}
|
||||
|
||||
if gi.queries != nil {
|
||||
gi.saveGamePlayer(gi.game.ID, ps.Player, slot) //nolint:errcheck
|
||||
gi.saveGame(gi.game) //nolint:errcheck
|
||||
saveGamePlayer(gi.queries, gi.game.ID, ps.Player, slot) //nolint:errcheck
|
||||
saveGame(gi.queries, gi.game) //nolint:errcheck
|
||||
}
|
||||
|
||||
gi.notify()
|
||||
@@ -190,7 +190,7 @@ func (gi *GameInstance) CreateRematch(gs *GameStore) *GameInstance {
|
||||
gi.game.RematchGameID = &newID
|
||||
|
||||
if gi.queries != nil {
|
||||
if err := gi.saveGame(gi.game); err != nil {
|
||||
if err := saveGame(gi.queries, gi.game); err != nil {
|
||||
gs.Delete(newID) //nolint:errcheck
|
||||
gi.game.RematchGameID = nil
|
||||
return nil
|
||||
@@ -224,7 +224,7 @@ func (gi *GameInstance) DropPiece(col int, playerColor int) bool {
|
||||
}
|
||||
|
||||
if gi.queries != nil {
|
||||
gi.saveGame(gi.game) //nolint:errcheck
|
||||
saveGame(gi.queries, gi.game) //nolint:errcheck
|
||||
}
|
||||
|
||||
gi.notify()
|
||||
|
||||
Reference in New Issue
Block a user