Feat: end turn endpoint
This commit is contained in:
@ -70,9 +70,9 @@ func saveStateByCtx(ctx context.Context, state *models.UserState) error {
|
||||
return saveState(username, state)
|
||||
}
|
||||
|
||||
func saveFullInfoByUsername(username string, fi *models.FullInfo) error {
|
||||
func saveFullInfo(fi *models.FullInfo) error {
|
||||
// INFO: unfortunately working no transactions; so case are possible where first object is updated but the second is not
|
||||
if err := saveState(username, fi.State); err != nil {
|
||||
if err := saveState(fi.State.Username, fi.State); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := saveRoom(fi.Room); err != nil {
|
||||
@ -194,7 +194,7 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error)
|
||||
err := errors.New("uknown role:" + role)
|
||||
return nil, err
|
||||
}
|
||||
if err := saveFullInfoByUsername(fi.State.Username, fi); err != nil {
|
||||
if err := saveFullInfo(fi); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return fi, nil
|
||||
|
@ -76,7 +76,7 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
|
||||
state.State.Username = cleanName
|
||||
// save state to cache
|
||||
// if err := saveState(cleanName, state.State); err != nil {
|
||||
if err := saveFullInfoByUsername(cleanName, state); err != nil {
|
||||
if err := saveFullInfo(state); err != nil {
|
||||
log.Error("failed to save state", "error", err)
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
@ -144,8 +144,8 @@ func cacheSetSession(key string, session *models.Session) error {
|
||||
return err
|
||||
}
|
||||
memcache.Set(key, sesb)
|
||||
// expire in 10 min
|
||||
memcache.Expire(key, 10*60)
|
||||
// TODO: to config
|
||||
memcache.Expire(key, 60*60)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package handlers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"golias/models"
|
||||
"html/template"
|
||||
"net/http"
|
||||
@ -125,3 +126,30 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
tmpl.ExecuteTemplate(w, "base", fi)
|
||||
}
|
||||
|
||||
func HandleEndTurn(w http.ResponseWriter, r *http.Request) {
|
||||
// get username
|
||||
fi, err := getFullInfoByCtx(r.Context())
|
||||
if err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
// check if one who pressed it is from the team who has the turn
|
||||
if fi.Room.TeamTurn != string(fi.State.Team) {
|
||||
err = errors.New("unexpected team turn:" + fi.Room.TeamTurn)
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
fi.Room.ChangeTurn()
|
||||
if err := saveFullInfo(fi); err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
// return html
|
||||
tmpl, err := template.ParseGlob("components/*.html")
|
||||
if err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
tmpl.ExecuteTemplate(w, "base", fi)
|
||||
}
|
||||
|
Reference in New Issue
Block a user