Add user authentication and game persistence with SQLite
- User registration/login with bcrypt password hashing - SQLite database with goose migrations and sqlc-generated queries - Games and players persisted to database, resumable after restart - Guest play still supported alongside authenticated users - Auth UI components (login/register forms, auth header, guest banner)
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
package game
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
type PlayerID string
|
||||
|
||||
type Player struct {
|
||||
ID PlayerID
|
||||
UserID *string // UUID for authenticated users, nil for guests
|
||||
Nickname string
|
||||
Color int // 1 = Red, 2 = Yellow
|
||||
}
|
||||
@@ -35,3 +38,27 @@ func NewGame(id string) *Game {
|
||||
Status: StatusWaitingForPlayer,
|
||||
}
|
||||
}
|
||||
|
||||
func (g *Game) BoardToJSON() string {
|
||||
data, _ := json.Marshal(g.Board)
|
||||
return string(data)
|
||||
}
|
||||
|
||||
func (g *Game) BoardFromJSON(data string) error {
|
||||
return json.Unmarshal([]byte(data), &g.Board)
|
||||
}
|
||||
|
||||
func (g *Game) WinningCellsToJSON() string {
|
||||
if g.WinningCells == nil {
|
||||
return ""
|
||||
}
|
||||
data, _ := json.Marshal(g.WinningCells)
|
||||
return string(data)
|
||||
}
|
||||
|
||||
func (g *Game) WinningCellsFromJSON(data string) error {
|
||||
if data == "" {
|
||||
return nil
|
||||
}
|
||||
return json.Unmarshal([]byte(data), &g.WinningCells)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user