Feat: roomlist & join room

This commit is contained in:
Grail Finder
2025-05-09 14:39:33 +03:00
parent 45761446e5
commit 6c9c86f02b
10 changed files with 141 additions and 10 deletions

View File

@ -8,6 +8,16 @@ import (
"net/http"
)
// func HandleRoomList(w http.ResponseWriter, r *http.Request) {
// pubRooms := listPublicRooms()
// tmpl, err := template.ParseGlob("components/*.html")
// if err != nil {
// abortWithError(w, err.Error())
// return
// }
// tmpl.ExecuteTemplate(w, "base", pubRooms)
// }
func HandleCreateRoom(w http.ResponseWriter, r *http.Request) {
// parse payload
payload := &models.RoomReq{
@ -32,6 +42,7 @@ func HandleCreateRoom(w http.ResponseWriter, r *http.Request) {
}
fi.State.RoomID = room.ID
fi.Room = room
fi.Room.IsPublic = true // hardcode for local test; move to form
if err := saveFullInfo(fi); err != nil {
msg := "failed to set current room to session"
log.Error(msg, "error", err)
@ -103,9 +114,6 @@ func HandleRoomEnter(w http.ResponseWriter, r *http.Request) {
}
func HandleJoinTeam(w http.ResponseWriter, r *http.Request) {
// parse payload
// team := r.URL.Query().Get("team")
// role := r.URL.Query().Get("role")
r.ParseForm()
team := r.PostFormValue("team")
role := r.PostFormValue("role")
@ -121,11 +129,20 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) {
abortWithError(w, err.Error())
return
}
if fi.Room.IsRunning && role == "mime" {
err = errors.New("cannot join as mime when game is running")
abortWithError(w, err.Error())
return
}
fi, err = joinTeam(r.Context(), role, team)
if err != nil {
abortWithError(w, err.Error())
return
}
// reveal all cards
if role == "mime" {
fi.Room.RevealAllCards()
}
// return html
tmpl, err := template.ParseGlob("components/*.html")
if err != nil {
@ -177,6 +194,39 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) {
abortWithError(w, err.Error())
return
}
// reveal all cards
if fi.State.Role == "mime" {
fi.Room.RevealAllCards()
}
// return html
tmpl, err := template.ParseGlob("components/*.html")
if err != nil {
abortWithError(w, err.Error())
return
}
tmpl.ExecuteTemplate(w, "room", fi)
}
func HandleJoinRoom(w http.ResponseWriter, r *http.Request) {
roomID := r.URL.Query().Get("id")
room, err := getRoomByID(roomID)
if err != nil {
abortWithError(w, err.Error())
return
}
fi, err := getFullInfoByCtx(r.Context())
if err != nil {
abortWithError(w, err.Error())
return
}
room.PlayerList = append(room.PlayerList, fi.State.Username)
fi.State.RoomID = room.ID
fi.Room = room
fi.List = nil
if err := saveFullInfo(fi); err != nil {
abortWithError(w, err.Error())
return
}
// return html
tmpl, err := template.ParseGlob("components/*.html")
if err != nil {