From decb7ad693d52c18a4d5bcf8e117405a7a1e9448 Mon Sep 17 00:00:00 2001 From: Settel Date: Thu, 15 Dec 2022 10:11:42 +0100 Subject: [PATCH] refactor: extract removePlayerById(), so it's reusable --- server/src/application/removeGame.go | 15 ++++++----- server/src/application/removePlayer.go | 37 +++++++++++++++----------- server/src/user/user.go | 2 +- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/server/src/application/removeGame.go b/server/src/application/removeGame.go index b4bc444..ef3b5e1 100644 --- a/server/src/application/removeGame.go +++ b/server/src/application/removeGame.go @@ -23,12 +23,15 @@ func (app *Application) RemoveGame(usr *user.User, w http.ResponseWriter, r *htt return } - if true { - err := fmt.Errorf("not yet implmemented (%s)", gm.GetId()) - log.ErrorLog(err) - w.WriteHeader(http.StatusInternalServerError) - fmt.Fprintf(w, "couldn't save game state") - } + log.Info("remove game %s\n", gm.GetId()) + delete(app.games, gameRef) + + // if true { + // err := fmt.Errorf("not yet implmemented (%s)", gm.GetId()) + // log.ErrorLog(err) + // w.WriteHeader(http.StatusInternalServerError) + // fmt.Fprintf(w, "couldn't save game state") + // } fmt.Fprintf(w, "ok") } diff --git a/server/src/application/removePlayer.go b/server/src/application/removePlayer.go index b4d2ec2..be6dbfb 100644 --- a/server/src/application/removePlayer.go +++ b/server/src/application/removePlayer.go @@ -4,6 +4,7 @@ import ( "fmt" "net/http" + "sirlab.de/go/knowyt/game" "sirlab.de/go/knowyt/log" "sirlab.de/go/knowyt/user" ) @@ -24,28 +25,34 @@ func (app *Application) RemovePlayer(usr *user.User, w http.ResponseWriter, r *h } id := r.URL.Query().Get("id") - deleteUser := app.users[id] - if deleteUser.GetId() != id || deleteUser.GetGameId() != gm.GetId() { - w.WriteHeader(http.StatusForbidden) - log.Warn("couldn't find player %s in game %s\n", id, gm.GetId()) - fmt.Fprintf(w, "forbidden") - return - } - if deleteUser.GetId() == usr.GetId() { + if id == usr.GetId() { w.WriteHeader(http.StatusForbidden) log.Warn("can't delete yourself\n") fmt.Fprintf(w, "forbidden") return } - - if err := deleteUser.DeleteUser(); err != nil { - w.WriteHeader(http.StatusInternalServerError) - log.ErrorLog(err) - fmt.Fprintf(w, "internal server error") + if err := app.removePlayerById(id, gm); err != nil { + w.WriteHeader(http.StatusForbidden) + log.Warn("%v\n", err.Error()) + fmt.Fprintf(w, "forbidden") return } - gm.RemovePlayer(deleteUser) - delete(app.users, id) fmt.Fprintf(w, "ok") } + +func (app *Application) removePlayerById(id string, gm *game.Game) error { + userToRemove := app.users[id] + if userToRemove.GetId() != id || userToRemove.GetGameId() != gm.GetId() { + return fmt.Errorf("couldn't find player %s in game %s\n", id, gm.GetId()) + } + + if err := userToRemove.RemovePlayer(); err != nil { + return err + } + + gm.RemovePlayer(userToRemove) + delete(app.users, id) + + return nil +} diff --git a/server/src/user/user.go b/server/src/user/user.go index a376966..3c5b16d 100644 --- a/server/src/user/user.go +++ b/server/src/user/user.go @@ -89,7 +89,7 @@ func (usr *User) SaveUser() error { return nil } -func (usr *User) DeleteUser() error { +func (usr *User) RemovePlayer() error { return os.Remove(usr.filename) }