package application import ( "fmt" "net/http" "sirlab.de/go/knowyt/game" "sirlab.de/go/knowyt/user" "strconv" ) func (app *Application) SavePlayer(usr *user.User, w http.ResponseWriter, r *http.Request) { gameRef := r.URL.Query().Get("g") gm, err := app.GetGameById(gameRef) if err != nil { w.WriteHeader(http.StatusNotFound) fmt.Fprintf(w, "game not found") return } if usr.GetGameId() != gameRef || !usr.IsGamemaster() { w.WriteHeader(http.StatusForbidden) fmt.Fprintf(w, "forbidden") return } id := r.URL.Query().Get("id") name := r.URL.Query().Get("name") score := r.URL.Query().Get("score") authcode := r.URL.Query().Get("authcode") if name == "" { w.WriteHeader(http.StatusBadRequest) fmt.Printf("player name must not be empty\n") fmt.Fprintf(w, "server error") return } if id != "" { if err := app.modifyUser(id, gm, name, authcode); err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Printf("%v\n", err) fmt.Fprintf(w, "server error") return } } else { if newPlayerId, err := app.createUser(gm, name, authcode); err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Printf("%v\n", err) fmt.Fprintf(w, "server error") return } else { id = newPlayerId } } if err := app.updateScore(gm, id, score); err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Printf("%v\n", err) fmt.Fprintf(w, "server error") return } fmt.Fprintf(w, "ok") } func (app *Application) updateScore(gm *game.Game, id string, scoreString string) error { scoreInt, err := strconv.Atoi(scoreString) if err != nil { return nil } if err := gm.SetScoreByPlayer(id, scoreInt); err != nil { return err } if err := app.saveGameState(gm); err != nil { return err } return nil }