Feat: switch team; team model

This commit is contained in:
Grail Finder
2025-05-08 15:36:25 +03:00
parent 21948b23f4
commit 3cc2ecb93d
8 changed files with 122 additions and 60 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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")
}