From 76bae3693a3f43b102fb717770e32d23bbaea436 Mon Sep 17 00:00:00 2001 From: Grail Finder Date: Wed, 2 Jul 2025 11:12:01 +0300 Subject: [PATCH] Enha: player update method --- handlers/actions.go | 39 ++++++--------------------------------- handlers/auth.go | 6 ++++-- models/main.go | 1 - repos/players.go | 18 ++++++++++++------ 4 files changed, 22 insertions(+), 42 deletions(-) diff --git a/handlers/actions.go b/handlers/actions.go index acc6dfd..4e34066 100644 --- a/handlers/actions.go +++ b/handlers/actions.go @@ -98,41 +98,14 @@ func notifyBotIfNeeded(room *models.Room) { // cache -func saveState(username string, state *models.UserState) error { - key := models.CacheStatePrefix + username - data, err := json.Marshal(state) - if err != nil { - return err - } - memcache.Set(key, data) - return nil -} - -func loadState(username string) (*models.UserState, error) { - key := models.CacheStatePrefix + username - data, err := memcache.Get(key) - if err != nil { - return nil, err - } - resp := &models.UserState{} - if err := json.Unmarshal(data, &resp); err != nil { - return nil, err - } - return resp, nil -} - -// not used -// func loadBot(botName, roomID string) (*llmapi.Bot, error) { -// key := "botkey_" + roomID + botName -// data, err := memcache.Get(key) +// func saveState(username string, state *models.UserState) error { +// key := models.CacheStatePrefix + username +// data, err := json.Marshal(state) // if err != nil { -// return nil, err +// return err // } -// resp := &llmapi.Bot{} -// if err := json.Unmarshal(data, &resp); err != nil { -// return nil, err -// } -// return resp, nil +// memcache.Set(key, data) +// return nil // } func getAllNames() []string { diff --git a/handlers/auth.go b/handlers/auth.go index 9a3150b..bfe6a68 100644 --- a/handlers/auth.go +++ b/handlers/auth.go @@ -80,7 +80,8 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) { } http.SetCookie(w, cookie) // check if that user was already in db - userstate, err := loadState(cleanName) + // userstate, err := loadState(cleanName) + userstate, err := repo.PlayerGetByName(cleanName) if err != nil || userstate == nil { userstate = models.InitPlayer(cleanName) } @@ -108,7 +109,8 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) { log.Debug("no room_id in login") fi.List = listRooms(false) // save state to cache - if err := saveState(cleanName, userstate); err != nil { + // if err := saveState(cleanName, userstate); err != nil { + if err := repo.PlayerUpdate(userstate); err != nil { // if err := saveFullInfo(fi); err != nil { log.Error("failed to save state", "error", err) abortWithError(w, err.Error()) diff --git a/models/main.go b/models/main.go index 3ff13d0..6b5a307 100644 --- a/models/main.go +++ b/models/main.go @@ -142,7 +142,6 @@ type Room struct { IsRunning bool `json:"is_running" db:"is_running"` IsOver bool `db:"is_over"` TeamWon UserTeam `db:"team_won"` - RoomPass string `json:"room_pass" db:"room_pass"` RoomLink string `db:"room_link"` // fields not in db ActionHistory []Action `db:"-"` diff --git a/repos/players.go b/repos/players.go index 3c14e10..a90db5e 100644 --- a/repos/players.go +++ b/repos/players.go @@ -6,12 +6,13 @@ import ( ) type PlayersRepo interface { - GetPlayerByName(username string) (*models.Player, error) - AddPlayer(player *models.Player) error - DeletePlayer(roomID, username string) error + PlayerGetByName(username string) (*models.Player, error) + PlayerAdd(player *models.Player) error + PlayerUpdate(player *models.Player) error + PlayerDelete(roomID, username string) error } -func (p *RepoProvider) GetPlayerByName(username string) (*models.Player, error) { +func (p *RepoProvider) PlayerGetByName(username string) (*models.Player, error) { var player models.Player err := p.DB.GetContext(context.Background(), &player, "SELECT id, room_id, username, team, role, is_bot FROM players WHERE username = ?", username) if err != nil { @@ -20,12 +21,17 @@ func (p *RepoProvider) GetPlayerByName(username string) (*models.Player, error) return &player, nil } -func (p *RepoProvider) AddPlayer(player *models.Player) error { +func (p *RepoProvider) PlayerAdd(player *models.Player) error { _, err := p.DB.ExecContext(context.Background(), "INSERT INTO players (room_id, username, team, role, is_bot) VALUES (?, ?, ?, ?, ?)", player.RoomID, player.Username, player.Team, player.Role, player.IsBot) return err } -func (p *RepoProvider) DeletePlayer(roomID, username string) error { +func (p *RepoProvider) PlayerUpdate(player *models.Player) error { + _, err := p.DB.ExecContext(context.Background(), "UPDATE players SET room_id = ?, username = ?, team = ?, role = ?, is_bot = ? WHERE id = ?", player.RoomID, player.Username, player.Team, player.Role, player.IsBot, player.ID) + return err +} + +func (p *RepoProvider) PlayerDelete(roomID, username string) error { _, err := p.DB.ExecContext(context.Background(), "DELETE FROM players WHERE room_id = ? AND username = ?", roomID, username) return err }