Enha: state to hold room_id instead of whole room

This commit is contained in:
Grail Finder
2025-05-08 10:25:38 +03:00
parent 3ade7310a7
commit b20f7ac6b7
12 changed files with 110 additions and 35 deletions

View File

@ -8,7 +8,25 @@ import (
)
func createRoom(ctx context.Context, req *models.RoomReq) (*models.Room, error) {
return nil, nil
creator, ok := ctx.Value(models.CtxUsernameKey).(string)
if !ok {
err := errors.New("failed to extract user from ctx")
return nil, err
}
room := req.CreateRoom(creator)
if err := saveRoom(room); err != nil {
return nil, err
}
return room, nil
}
func saveRoom(room *models.Room) error {
data, err := json.Marshal(room)
if err != nil {
return err
}
memcache.Set(models.CacheRoomPrefix+room.ID, data)
return nil
}
func getRoomByID(roomID string) (*models.Room, error) {
@ -86,3 +104,19 @@ func getAllNames() []string {
}
return names
}
func getFullInfoByCtx(ctx context.Context) (*models.FullInfo, error) {
state, err := getStateByCtx(ctx)
if err != nil {
return nil, err
}
room, err := getRoomByID(state.RoomID)
if err != nil {
return nil, err
}
resp := &models.FullInfo{
State: state,
Room: room,
}
return resp, nil
}

View File

@ -80,9 +80,9 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
// }
// state := models.InitState(cleanName)
state := models.MakeTestState()
state.Username = cleanName
state.State.Username = cleanName
// save state to cache
saveState(cleanName, state)
saveState(cleanName, state.State)
tmpl.ExecuteTemplate(w, "base", state)
}

View File

@ -79,3 +79,26 @@ func HandleRoomEnter(w http.ResponseWriter, r *http.Request) {
}
tmpl.ExecuteTemplate(w, "base", room)
}
func HandleJoinTeam(w http.ResponseWriter, r *http.Request) {
// parse payload
team := r.URL.Query().Get("team")
role := r.URL.Query().Get("role")
if team == "" || role == "" {
msg := "missing team or role"
log.Error(msg)
abortWithError(w, msg)
// error
return
}
// get username
// get state
// get room
// return html
tmpl, err := template.ParseGlob("components/*.html")
if err != nil {
abortWithError(w, err.Error())
return
}
tmpl.ExecuteTemplate(w, "base", nil)
}

View File

@ -2,7 +2,6 @@ package handlers
import (
"golias/config"
"golias/models"
"golias/pkg/cache"
"html/template"
"log/slog"
@ -63,13 +62,8 @@ func HandleHome(w http.ResponseWriter, r *http.Request) {
abortWithError(w, err.Error())
return
}
userState, _ := getStateByCtx(r.Context())
if userState == nil {
userState = &models.UserState{}
fi, _ := getFullInfoByCtx(r.Context())
if err := tmpl.ExecuteTemplate(w, "base", fi); err != nil {
log.Error("failed to exec templ;", "error", err, "templ", "base")
}
// if err != nil {
// abortWithError(w, err.Error())
// return
// }
tmpl.ExecuteTemplate(w, "base", userState)
}