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
	 Grail Finder
					Grail Finder