Feat: switch team; team model
This commit is contained in:
		| @@ -5,6 +5,7 @@ import ( | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"golias/models" | ||||
| 	"golias/utils" | ||||
| ) | ||||
|  | ||||
| func createRoom(ctx context.Context, req *models.RoomReq) (*models.Room, error) { | ||||
| @@ -140,3 +141,61 @@ func getFullInfoByCtx(ctx context.Context) (*models.FullInfo, error) { | ||||
| 	} | ||||
| 	return resp, nil | ||||
| } | ||||
|  | ||||
| func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error) { | ||||
| 	// get username | ||||
| 	fi, _ := getFullInfoByCtx(ctx) | ||||
| 	fi.Room.RedTeam.Guessers = utils.RemoveFromSlice(fi.State.Username, fi.Room.RedTeam.Guessers) | ||||
| 	fi.Room.BlueTeam.Guessers = utils.RemoveFromSlice(fi.State.Username, fi.Room.BlueTeam.Guessers) | ||||
| 	// get room | ||||
| 	if role == "mime" { | ||||
| 		if team == "blue" { | ||||
| 			if fi.Room.BlueTeam.Mime != "" { | ||||
| 				// error: alredy taken | ||||
| 				err := errors.New("Mime role already taken!") | ||||
| 				return fi, err | ||||
| 			} | ||||
| 			fi.Room.BlueTeam.Mime = fi.State.Username | ||||
| 			fi.State.Team = "blue" | ||||
| 			fi.State.Role = "mime" | ||||
| 			if fi.Room.RedTeam.Mime == fi.State.Username { | ||||
| 				fi.Room.RedTeam.Mime = "" | ||||
| 			} | ||||
| 		} else if team == "red" { | ||||
| 			if fi.Room.RedTeam.Mime != "" { | ||||
| 				// error: alredy taken | ||||
| 				err := errors.New("Mime role already taken!") | ||||
| 				return fi, err | ||||
| 			} | ||||
| 			fi.Room.RedTeam.Mime = fi.State.Username | ||||
| 			fi.State.Team = "red" | ||||
| 			fi.State.Role = "mime" | ||||
| 			if fi.Room.BlueTeam.Mime == fi.State.Username { | ||||
| 				fi.Room.BlueTeam.Mime = "" | ||||
| 			} | ||||
| 		} else { | ||||
| 			err := errors.New("uknown team:" + team) | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} else if role == "guesser" { | ||||
| 		if team == "blue" { | ||||
| 			fi.Room.BlueTeam.Guessers = append(fi.Room.BlueTeam.Guessers, fi.State.Username) | ||||
| 			fi.State.Team = "blue" | ||||
| 			fi.State.Role = "guesser" | ||||
| 		} else if team == "red" { | ||||
| 			fi.Room.RedTeam.Guessers = append(fi.Room.RedTeam.Guessers, fi.State.Username) | ||||
| 			fi.State.Team = "red" | ||||
| 			fi.State.Role = "guesser" | ||||
| 		} else { | ||||
| 			err := errors.New("uknown team:" + team) | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} else { | ||||
| 		err := errors.New("uknown role:" + role) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if err := saveFullInfoByUsername(fi.State.Username, fi); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return fi, nil | ||||
| } | ||||
|   | ||||
| @@ -107,46 +107,13 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) { | ||||
| 		return | ||||
| 	} | ||||
| 	// get username | ||||
| 	fi, _ := getFullInfoByCtx(r.Context()) | ||||
| 	// get room | ||||
| 	if role == "mime" { | ||||
| 		if team == "blue" { | ||||
| 			fi.Room.BlueMime = fi.State.Username | ||||
| 			fi.State.Team = "blue" | ||||
| 			fi.State.Role = "mime" | ||||
| 		} else if team == "red" { | ||||
| 			fi.Room.RedMime = fi.State.Username | ||||
| 			fi.State.Team = "red" | ||||
| 			fi.State.Role = "mime" | ||||
| 		} else { | ||||
| 			msg := "uknown team:" + team | ||||
| 			log.Error(msg) | ||||
| 			abortWithError(w, msg) | ||||
| 			return | ||||
| 		} | ||||
| 	} else if role == "guesser" { | ||||
| 		if team == "blue" { | ||||
| 			fi.Room.BlueGuessers = append(fi.Room.BlueGuessers, fi.State.Username) | ||||
| 			fi.State.Team = "red" | ||||
| 			fi.State.Role = "guesser" | ||||
| 		} else if team == "red" { | ||||
| 			fi.Room.RedGuessers = append(fi.Room.RedGuessers, fi.State.Username) | ||||
| 			fi.State.Team = "red" | ||||
| 			fi.State.Role = "guesser" | ||||
| 		} else { | ||||
| 			msg := "uknown team:" + team | ||||
| 			log.Error(msg) | ||||
| 			abortWithError(w, msg) | ||||
| 			return | ||||
| 		} | ||||
| 	} else { | ||||
| 		msg := "uknown role:" + role | ||||
| 		log.Error(msg) | ||||
| 		abortWithError(w, msg) | ||||
| 	fi, err := getFullInfoByCtx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	if err := saveFullInfoByUsername(fi.State.Username, fi); err != nil { | ||||
| 		log.Error("failed to save state", "error", err) | ||||
| 	fi, err = joinTeam(r.Context(), role, team) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|   | ||||
| @@ -63,6 +63,7 @@ func HandleHome(w http.ResponseWriter, r *http.Request) { | ||||
| 		return | ||||
| 	} | ||||
| 	fi, _ := getFullInfoByCtx(r.Context()) | ||||
| 	log.Debug("data debug", "fi", fi) | ||||
| 	if err := tmpl.ExecuteTemplate(w, "base", fi); err != nil { | ||||
| 		log.Error("failed to exec templ;", "error", err, "templ", "base") | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder