Enha: player update method
This commit is contained in:
		| @@ -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 { | ||||
|   | ||||
| @@ -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()) | ||||
|   | ||||
| @@ -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:"-"` | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder