Enha: player update method
This commit is contained in:
		| @@ -98,41 +98,14 @@ func notifyBotIfNeeded(room *models.Room) { | |||||||
|  |  | ||||||
| // cache | // cache | ||||||
|  |  | ||||||
| func saveState(username string, state *models.UserState) error { | // func saveState(username string, state *models.UserState) error { | ||||||
| 	key := models.CacheStatePrefix + username | // 	key := models.CacheStatePrefix + username | ||||||
| 	data, err := json.Marshal(state) | // 	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) |  | ||||||
| // 	if err != nil { | // 	if err != nil { | ||||||
| // 		return nil, err | // 		return err | ||||||
| // 	} | // 	} | ||||||
| // 	resp := &llmapi.Bot{} | // 	memcache.Set(key, data) | ||||||
| // 	if err := json.Unmarshal(data, &resp); err != nil { | // 	return nil | ||||||
| // 		return nil, err |  | ||||||
| // 	} |  | ||||||
| // 	return resp, nil |  | ||||||
| // } | // } | ||||||
|  |  | ||||||
| func getAllNames() []string { | func getAllNames() []string { | ||||||
|   | |||||||
| @@ -80,7 +80,8 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) { | |||||||
| 	} | 	} | ||||||
| 	http.SetCookie(w, cookie) | 	http.SetCookie(w, cookie) | ||||||
| 	// check if that user was already in db | 	// 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 { | 	if err != nil || userstate == nil { | ||||||
| 		userstate = models.InitPlayer(cleanName) | 		userstate = models.InitPlayer(cleanName) | ||||||
| 	} | 	} | ||||||
| @@ -108,7 +109,8 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) { | |||||||
| 		log.Debug("no room_id in login") | 		log.Debug("no room_id in login") | ||||||
| 		fi.List = listRooms(false) | 		fi.List = listRooms(false) | ||||||
| 		// save state to cache | 		// 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 { | 			// if err := saveFullInfo(fi); err != nil { | ||||||
| 			log.Error("failed to save state", "error", err) | 			log.Error("failed to save state", "error", err) | ||||||
| 			abortWithError(w, err.Error()) | 			abortWithError(w, err.Error()) | ||||||
|   | |||||||
| @@ -142,7 +142,6 @@ type Room struct { | |||||||
| 	IsRunning      bool      `json:"is_running" db:"is_running"` | 	IsRunning      bool      `json:"is_running" db:"is_running"` | ||||||
| 	IsOver         bool      `db:"is_over"` | 	IsOver         bool      `db:"is_over"` | ||||||
| 	TeamWon        UserTeam  `db:"team_won"` | 	TeamWon        UserTeam  `db:"team_won"` | ||||||
| 	RoomPass       string    `json:"room_pass" db:"room_pass"` |  | ||||||
| 	RoomLink       string    `db:"room_link"` | 	RoomLink       string    `db:"room_link"` | ||||||
| 	// fields not in db | 	// fields not in db | ||||||
| 	ActionHistory []Action             `db:"-"` | 	ActionHistory []Action             `db:"-"` | ||||||
|   | |||||||
| @@ -6,12 +6,13 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type PlayersRepo interface { | type PlayersRepo interface { | ||||||
| 	GetPlayerByName(username string) (*models.Player, error) | 	PlayerGetByName(username string) (*models.Player, error) | ||||||
| 	AddPlayer(player *models.Player) error | 	PlayerAdd(player *models.Player) error | ||||||
| 	DeletePlayer(roomID, username string) 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 | 	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) | 	err := p.DB.GetContext(context.Background(), &player, "SELECT id, room_id, username, team, role, is_bot FROM players WHERE username = ?", username) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -20,12 +21,17 @@ func (p *RepoProvider) GetPlayerByName(username string) (*models.Player, error) | |||||||
| 	return &player, nil | 	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) | 	_, 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 | 	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) | 	_, err := p.DB.ExecContext(context.Background(), "DELETE FROM players WHERE room_id = ? AND username = ?", roomID, username) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder