Fix: exit from room deletes player

This commit is contained in:
Grail Finder
2025-07-11 13:02:44 +03:00
parent 566d645230
commit 3cb43d5129
2 changed files with 29 additions and 17 deletions

View File

@ -83,27 +83,39 @@ func HandleExit(w http.ResponseWriter, r *http.Request) {
abortWithError(w, "cannot leave when game is running")
return
}
var creatorLeft bool
// if creator leaves, remove all players from room and delete room
if fi.Room.CreatorName == fi.State.Username {
creatorLeft = true
}
exitedRoom := fi.ExitRoom()
if creatorLeft {
if err := repo.RoomDeleteByID(r.Context(), exitedRoom.ID); err != nil {
players, err := repo.PlayerListByRoom(r.Context(), fi.Room.ID)
if err != nil {
log.Error("failed to list players in room", "error", err)
abortWithError(w, err.Error())
return
}
for _, p := range players {
if p.IsBot {
if err := repo.PlayerDelete(r.Context(), p.Username); err != nil {
log.Error("failed to delete bot", "error", err)
}
continue
}
if err := repo.PlayerExitRoom(r.Context(), p.Username); err != nil {
log.Error("failed to exit room", "error", err)
}
}
if err := repo.RoomDeleteByID(r.Context(), fi.Room.ID); err != nil {
log.Error("failed to remove room", "error", err)
}
notify(models.NotifyRoomListUpdate, "")
} else {
// if regular player leaves, just exit room
if err := repo.PlayerExitRoom(r.Context(), fi.State.Username); err != nil {
log.Error("failed to exit room", "error", err)
abortWithError(w, err.Error())
return
}
}
if err := repo.PlayerExitRoom(r.Context(), fi.State.Username); err != nil {
log.Error("failed to exit room", "error", err)
abortWithError(w, err.Error())
return
}
if err := repo.RoomUpdate(r.Context(), exitedRoom); err != nil {
log.Error("failed to update room", "error", err)
abortWithError(w, err.Error())
return
}
fi.Room = nil
fi.State.RoomID = nil
fi.List, err = repo.RoomList(r.Context())
if err != nil {
abortWithError(w, err.Error())